ASP.Net MVC 在Controller中修改Form表单值的问题

问题请看这里

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. 原则上说表单显示的应该是用户输入的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值