有时候,我们需要从页面传递一组数据到后台,但同时又需要传递几个独立的参数,这种情况很伤脑筋。
网上有各种各样的说法和办法,但都不好用,或没有说到关键的地方。
还有的建议传字符串后台格式化或解析,也有专门写一个切面程序修改mvc自带的格式化方法的,等等,都不是想要的东东。
我需要的是一个简简单单,不做任何改动就能实现的方法。
今天遇到这个问题,反复调试了好多次,终于找到了最简单的方法,什么都不用改,直接传递,直接接收
现在记录下来,给大家参考参考:
一. 前端js提交方法:
function submit(group, quarter) {//这里只是个例子,不要关注业务,只看提交的数据格式就好 var list = $('#tttt').find('.on'), dt = { 'Quarter': quarter, 'Group': group, 'Streses': [] }; for (var i = 0; i < list.length; i++) { var t = $(list[i]), v = parseInt(t.attr('idx') || 0, 10), p = t.parent().parent(), title = p.children().first().html(); dt.Streses.push({ 'Name': title, 'Level': v }); } myAjax('/Stress/save', dt, null, function (re) { if (re.Code == 'Success') { location.href = 'yyyyy'; } }); }
二.后台action接收方法:
[HttpPost] public ActionResult Save(StressModel stress) { //do something... return View(ReMsg); }
public class Stress { public string Name { get; set; } public int Level { get; set; } } public class StressModel { public int Quarter { get; set; } public string Group { get; set; } public List<Stress> Streses { get; set; } }
看看实际运行的结果:
这里需要特别注意的一点就是,.接收对象本身字段可以跟json不完全对应,这点大家都知道,但里面的列表对象,却必须完全对应!
我就是卡在这里,导致各种不理解,各种不成功。。。