arrMachine[0][id] 142 arrMachine[0][status] true arrMachine[1][id] 143 arrMachine[1][status] true
这种结构的数据MVC后台怎么接收???
按照答案1给出来的类,完全可以啊,你肯定是其他地方的问题。你看我的截图,模拟的跟你的一样
请教下,你用的mvc几?我和你完全一样,还是获取不到
@小小高: 这个有可能,我MVC5.如果你是4,就要使用ModelBinder来强制反序列化参数了,就像楼下说的一样
@SpringRen:
@SpringRen: 嗯,谢了。我试试去。暂时用的json
@小小高: 嗯嗯,多一样的,代码和执行效率都没啥变化,就是换了个地方反序列化
public class Machine
{
public int id { get; set; }
public bool status { get; set; }
}
List<Machine> arrMachine
用不了。。。
@小小高:
如何用不了..
拿得到length,数据没有,http请求头中是有数据的。。
List<你的类>
用不了,我也觉得奇怪
@小小高: 还有一种方法
你在前台把objList变成json字符串
在mvc中使用string接收
然后反序列化成List<你的类>
@刘宏玺: 我一直都用这种方法,不过想尝试下模型绑定。。。
构造name为[0].id
[0].status应该是可以的,用List接收
1.定义一个类P来封装参数
2.自定义一个类T继承自IModelBinder,实现BindModel方法
3.public ActionResult GetList([ModelBinder(typeof(T))]P p)
嗯,用你推荐的做法。搞定了.MVC4
代码:
public class GC_ModelBindcs : IModelBinder { public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { List<Model> model = (List<Model>)bindingContext.Model ?? new List<Model>(); // string str = bindingContext.ValueProvider.GetValue("arrMachine[0][status]").AttemptedValue; int count = 0; if (controllerContext.HttpContext.Request.Form.AllKeys.Length > 0) { count = (controllerContext.HttpContext.Request.Form.AllKeys.Length - 1) / 2; } for (int i = 0; i < count; i++) { Model m = new Model(); string id_key = bindingContext.ModelName + "[" + i + "]" + "[id]"; string status_key = bindingContext.ModelName + "[" + i + "]" + "[status]"; m.id = int.Parse(bindingContext.ValueProvider.GetValue(id_key).AttemptedValue); m.status = bool.Parse(bindingContext.ValueProvider.GetValue(status_key).AttemptedValue); model.Add(m); } return model; } }
MVC后台:
public ActionResult Index_Post(int groupId, [ModelBinder(typeof(GC_ModelBindcs))]List<Model> arrMachine)
{
return View();
}