首页 新闻 搜索 专区 学院

ASP.NET MVC 表单中的input标签不指定name属性的名字就无法获取到数据

0
悬赏园豆:50 [已解决问题] 解决于 2017-04-08 10:11

可以看到第一张图,就多谢几个字母,就无法获取到表单的数据,把name属性取了,也无法获取到表单的数据。有大神来解释一下吗?

夜莫白的主页 夜莫白 | 初学一级 | 园豆:3
提问于:2017-03-31 10:49
< >
分享
最佳答案
2

 表单中的name会被MVC的模型绑定机制映射为模型类的属性,这里name和属性名需要匹配。

如果想实现你这种写法,需要自定义一个ModelBinder来告诉MVC框架怎么去绑定你的数据:

 1 public class Person
 2     {
 3         public string LastName { get; set; }
 4     }
 5 
 6 
 7 public class MyModelBinder : IModelBinder
 8     {
 9         public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
10         {
11             Person model = (Person)bindingContext.Model ?? new Person();
12             model.LastName = bindingContext.ValueProvider.GetValue("lllastName").AttemptedValue;
13             return model;
14         }
15     }

最后要将注册这个自定义的模型绑定器才能生效。

在Application_Start中注册自定义ModelBinder

ModelBinders.Binders.Add(typeof(Person), new MyModelBinder());
收获园豆:50
行乎当行 | 菜鸟二级 |园豆:347 | 2017-03-31 15:07
其他回答(6)
1

表单提交,name就对应后端对象的属性名称,你把属性名称都干掉了,后端肯定就无法序列化了呢。

幻天芒 | 园豆:36662 (高人七级) | 2017-03-31 11:10
0

为啥不直接给个ID....

流年过往 | 园豆:464 (菜鸟二级) | 2017-03-31 11:16
0

你这个name属性必须和 Action 方法参数(属性)同名。

建议去了解一下“模型绑定”。。

qingYun | 园豆:43 (初学一级) | 2017-03-31 12:29
0

最好还是给你要绑定和赋值的属性加个ID,这样操作起来也方便,可读性也强。

BUTTERAPPLE | 园豆:2950 (老鸟四级) | 2017-03-31 16:51
0

你要整明白的是,表单获取数据本身就是根据name属性来取得值,如果后台获取的name属性名称和页面没有一一对应,就等于找不到这个name。

就像从公安系统根据身份证号码找到你的信息,你得提供一个能够和系统匹配的身份证号码,如果你提供的号码不存在,或者公安系统里把你正确的号码改了,那么就无法找到你的信息。

 

这是规则

龙行天涯 | 园豆:1821 (小虾三级) | 2017-03-31 17:01
0

多新鲜啊,表单就是根据name去提交数据的。

为森 | 园豆:379 (菜鸟二级) | 2017-04-01 16:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册