首页 新闻 搜索 专区 学院

ASP.NET MVC模型绑定问题求解???

0
悬赏园豆:5 [已解决问题] 解决于 2016-05-27 16:24
arrMachine[0][id]    
142
arrMachine[0][status]    
true
arrMachine[1][id]    
143
arrMachine[1][status]    
true

这种结构的数据MVC后台怎么接收???

问题补充:

小小高的主页 小小高 | 小虾三级 | 园豆:820
提问于:2016-05-26 17:18
< >
分享
最佳答案
0

按照答案1给出来的类,完全可以啊,你肯定是其他地方的问题。你看我的截图,模拟的跟你的一样

收获园豆:5
SpringRen | 菜鸟二级 |园豆:412 | 2016-05-26 18:01

请教下,你用的mvc几?我和你完全一样,还是获取不到

小小高 | 园豆:820 (小虾三级) | 2016-05-27 16:14

@小小高: 这个有可能,我MVC5.如果你是4,就要使用ModelBinder来强制反序列化参数了,就像楼下说的一样

SpringRen | 园豆:412 (菜鸟二级) | 2016-05-27 16:18

@SpringRen: 

小小高 | 园豆:820 (小虾三级) | 2016-05-27 16:22

@SpringRen: 嗯,谢了。我试试去。暂时用的json

小小高 | 园豆:820 (小虾三级) | 2016-05-27 16:23

@小小高: 嗯嗯,多一样的,代码和执行效率都没啥变化,就是换了个地方反序列化

SpringRen | 园豆:412 (菜鸟二级) | 2016-05-27 16:25
其他回答(3)
0

public class Machine

{

  public int id { get; set; }

  public bool status { get; set; }

}

List<Machine> arrMachine

RosonJ | 园豆:4273 (老鸟四级) | 2016-05-26 17:22

用不了。。。

支持(0) 反对(0) 小小高 | 园豆:820 (小虾三级) | 2016-05-26 17:23

支持(0) 反对(0) 小小高 | 园豆:820 (小虾三级) | 2016-05-26 17:24

@小小高: 

如何用不了..

支持(0) 反对(0) RosonJ | 园豆:4273 (老鸟四级) | 2016-05-26 17:24

拿得到length,数据没有,http请求头中是有数据的。。

 

支持(0) 反对(0) 小小高 | 园豆:820 (小虾三级) | 2016-05-26 17:25
0

List<你的类>

刘宏玺 | 园豆:14006 (专家六级) | 2016-05-26 17:22

用不了,我也觉得奇怪

支持(0) 反对(0) 小小高 | 园豆:820 (小虾三级) | 2016-05-26 17:23

@小小高: 还有一种方法

你在前台把objList变成json字符串

在mvc中使用string接收

然后反序列化成List<你的类>

支持(0) 反对(0) 刘宏玺 | 园豆:14006 (专家六级) | 2016-05-26 17:25

@刘宏玺: 我一直都用这种方法,不过想尝试下模型绑定。。。

支持(0) 反对(0) 小小高 | 园豆:820 (小虾三级) | 2016-05-26 17:26

构造name为[0].id

[0].status应该是可以的,用List接收

支持(0) 反对(0) 小小高 | 园豆:820 (小虾三级) | 2016-05-26 17:28
0

1.定义一个类P来封装参数

2.自定义一个类T继承自IModelBinder,实现BindModel方法

3.public ActionResult GetList([ModelBinder(typeof(T))]P p)

jello chen | 园豆:7096 (大侠五级) | 2016-05-26 18:40

嗯,用你推荐的做法。搞定了.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();
        }

支持(0) 反对(0) 小小高 | 园豆:820 (小虾三级) | 2016-05-27 18:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册