Asp.net mvc 3 MVC3查询字符串参数和输入字段共享相同的名称

Asp.net mvc 3 MVC3查询字符串参数和输入字段共享相同的名称,asp.net-mvc-3,binding,query-parameters,Asp.net Mvc 3,Binding,Query Parameters,我有一个名为“from”的查询参数(一个from日期) 以及绑定到名为的属性的输入 在我的ViewModel构造函数中,我将From属性设置为日期 如果查询参数名称和属性名称不同,则可以使用此方法,但如果它们是相同的MVC3,并且具有某种魔力,则会获取查询参数中的任何值并与之绑定,而不管From属性中的值是什么。。为什么?这个魔法在很多层面上都是错误的!如何禁用它 编辑:如果存在与输入相同id的查询字符串,则属性获取的值无关紧要,MVC自动获取该值并将其分配给输入元素,MVC按约定工作,并按名称

我有一个名为“from”的查询参数(一个from日期) 以及绑定到名为的属性的输入

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

如果查询参数名称和属性名称不同,则可以使用此方法,但如果它们是相同的MVC3,并且具有某种魔力,则会获取查询参数中的任何值并与之绑定,而不管From属性中的值是什么。。为什么?这个魔法在很多层面上都是错误的!如何禁用它


编辑:如果存在与输入相同id的查询字符串,则属性获取的值无关紧要,MVC自动获取该值并将其分配给输入元素,MVC按约定工作,并按名称将值绑定到模型。为了了解发生了什么,我建议您阅读Phil Haack的这篇博客文章:

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

您需要调用

ModelState.Clear();
从控制器操作返回之前

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


这是一个bug还是一个特性取决于你的观点

如何设置属性?我遇到了完全相同的问题因为我相信这里的每一条信息都是有用的,所以这里的每一个人都是消极的。为什么要投反对票?答案是正确的、适当的、信息丰富的。它们不是无关的,我有一个查询字符串“from”,它与模型上的属性from相关,它绑定到视图中的一个字段。问题是MVC超越了我的模型,并将查询字符串直接绑定到视图。。