ASP.Net MVC 在Controller中修改Form表单值的问题
2014-09-03 20:15
483 查看
问题请看这里
MVC 相关源码片段:
string attemptedValue = (string)htmlHelper.GetModelStateValue(fullName, typeof(string));
tagBuilder.MergeAttribute("value", attemptedValue ?? ((useViewData) ? htmlHelper.EvalString(fullName, format) : valueParameter), isExplicitValue);
从这段代码中可以看到:MVC先从ModelState中获取表单字段值,在ModelState中不存在相关值的情况下才使用Controller传来的Model里的值。
微软为什么这样处理呢?
其实我也不知道,那我就大胆猜想下:
1. Form的值应该由用户提供,程序员是没权利修改的,只有在用户放弃提供值的情况下(如首次进入Edit界面),才允许Dev提供。
2. MVC在模型绑定过程中会进行数据验证,一方面:MVC得保证在数据验证失败情况下能够把错误数据显示出来(保存在ModelState中)。另一方面:Dev在Controller修改Form值是发生在数据验证成功之后,MVC不能保证Dev提供的值是否符合验证条件。
3. 原则上说表单显示的应该是用户输入的。
MVC 相关源码片段:
string attemptedValue = (string)htmlHelper.GetModelStateValue(fullName, typeof(string));
tagBuilder.MergeAttribute("value", attemptedValue ?? ((useViewData) ? htmlHelper.EvalString(fullName, format) : valueParameter), isExplicitValue);
从这段代码中可以看到:MVC先从ModelState中获取表单字段值,在ModelState中不存在相关值的情况下才使用Controller传来的Model里的值。
微软为什么这样处理呢?
其实我也不知道,那我就大胆猜想下:
1. Form的值应该由用户提供,程序员是没权利修改的,只有在用户放弃提供值的情况下(如首次进入Edit界面),才允许Dev提供。
2. MVC在模型绑定过程中会进行数据验证,一方面:MVC得保证在数据验证失败情况下能够把错误数据显示出来(保存在ModelState中)。另一方面:Dev在Controller修改Form值是发生在数据验证成功之后,MVC不能保证Dev提供的值是否符合验证条件。
3. 原则上说表单显示的应该是用户输入的。
相关文章推荐
- asp.net中动态修改action使server的Form传递表单值,及相关问题
- ASP.NET MVC 客户端验证失败后表单仍然提交问题
- ASP.NET在IE10中Form表单身份验证失效问题解决方法
- ASP.NET WebForm Form表单如何实现MVC那种“自动装配”效果呢?
- ASP.NET\ASP.NET MVC表单提交遇到的问题结论
- ASP.NET MVC中的Form.target问题
- asp.net mvc 表单重复提交问题。如何解决呀?
- ASP.NET MVC 与Form表单交互
- 关于富文本编辑框(FckEditor)在Asp.net mvc中不能传到controller中的问题
- 【小技巧】自定义asp.net mvc的WebFormViewEngine修改默认的目录结构
- ASP.NET在IE9,IE10,IE11中Form表单身份验证失效问题解决方法
- 详解ASP.NET MVC Form表单验证
- ASP.NET WebForm Form表单如何实现MVC那种“自动装配”效果呢?
- 【小技巧】自定义asp.net mvc的WebFormViewEngine修改默认的目录结构
- ASP.NET在IE9,IE10,IE11中Form表单身份验证失效问题解决方法
- 【小技巧】自定义asp.net mvc的WebFormViewEngine修改默认的目录结构
- asp.net教程:UrlRewrite时修改form的action属性问题[转]
- ASP.NET MVC程序中动态修改form的Action值
- ASP.NET MVC Controller Session问题