可以看到第一张图,就多谢几个字母,就无法获取到表单的数据,把name属性取了,也无法获取到表单的数据。有大神来解释一下吗?
表单中的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());
表单提交,name就对应后端对象的属性名称,你把属性名称都干掉了,后端肯定就无法序列化了呢。
为啥不直接给个ID....
你这个name属性必须和 Action 方法参数(属性)同名。
建议去了解一下“模型绑定”。。
最好还是给你要绑定和赋值的属性加个ID
,这样操作起来也方便,可读性也强。
你要整明白的是,表单获取数据本身就是根据name属性来取得值,如果后台获取的name属性名称和页面没有一一对应,就等于找不到这个name。
就像从公安系统根据身份证号码找到你的信息,你得提供一个能够和系统匹配的身份证号码,如果你提供的号码不存在,或者公安系统里把你正确的号码改了,那么就无法找到你的信息。
这是规则
多新鲜啊,表单就是根据name去提交数据的。