MVC3查询字符串参数和输入字段共享同名

时间:2011-10-19 10:41:53

标签: asp.net-mvc-3 binding query-parameters

我有一个名为“from”的查询参数(从日期开始) 以及绑定到名为From

的属性的输入

在我的ViewModel构造函数中,我将From属性设置为日期...

如果查询参数名称和属性名称不同,这是有效的,但如果它们是相同的,带有一些魔法的MVC3会占用查询参数中的任何值并与之绑定,它不关心From中的值是什么财产..为什么?这个atuomagic在如此多的层面上是如此错误!如何禁用它?

编辑:无论属性获取什么值都无关紧要,如果存在与输入MVC相同的查询字符串,则自动获取该值并将其分配给输入元素

2 个答案:

答案 0 :(得分:2)

您需要致电

ModelState.Clear();

从控制器操作返回之前。

问题是ModelState具有查询字符串中的值,并且在绑定发生时优先于模型中的值。

这是错误还是功能取决于您的观点...... http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx

答案 1 :(得分:0)

MVC按惯例工作,并通过名称将值绑定到模型。要了解正在发生的事情,我建议您阅读Phil Haack撰写的这篇博客文章:What’s the Difference Between a Value Provider and Model Binder?

在同一个请求中使用两个名称相同的不相关元素是不好的做法,因为名称冲突很可能会导致意外问题。最佳做法是重命名其中一个元素,以消除名称冲突。