Modelbinding在ASP.NET MVC 2空的查询字符串参数
-
13-09-2019 - |
题
href="https://stackoverflow.com/questions/559846/asp-net-mvc-updatemodel-empty-property/1263555#1263555">这里所描述的行为似乎现在是默认为ASP.NET MVC 2(至少对于预览1)。
当modelbinding查询字符串是这样的:
?Foo=&Bar=cat
在下面的结合发生(假设你与“富”和“酒吧”字串属性绑定到模型)
<强> ASP.NET MVC 1 强>
model.Foo = "";
model.Bar = "cat":
<强> ASP.NET MVC 2(预览1〜RC)强>
model.Foo = null;
model.Bar = "cat":
想给任何人谁是玩V2抬起头,因为这不是在“的 GU-说明”。也很好奇,如果任何人在知道能就是否这将是最终执行或配置的功能有何评论?我很好,无论哪种方式,但只希望他们不要切换回老样子!作为配置的就更好了。
编辑:从这个角度来吸取的教训是什么版本,你正在开发针对不写代码,说Foo.Length == 0来测试一个空字符串或Foo.Length> 3,检查是否有最小长度。使用string.IsNullOrEmpty(美孚)和/或检查空第一。
更新:这个问题引起了我的好奇,为什么他们会实际上使这一变化。我想,我无意中发现了答案,而研究禁用的控件。所述W3 HTML规范定义一个“成功控制一>”,如下所示:
一个成功的控制是“有效”为 提交。每一个成功的控制 已在其控制的名字配对其 电流值作为提交的一部分 形式的数据集。一个成功的控制 必须在FORM元素中定义 并且必须具有控制名。
在换言之 - 一个成功的控制为1,这将使它返回到服务器作为查询字符串参数。现在,如果控制不具有有效的值,则根据该规范:
如果一个控制不具有电流值 当提交表单时,用户 代理并不需要把它当作 一个成功的控制。
(与“不需要...”这里当场'随意解释的语言)
所以我觉得通过发送一个空相反,它降低了浏览器兼容性能,其中某些浏览器可以发送Foo=&Bar=
和其他人可能甚至不发送的查询字符串参数为空字符串的。通过总是在各方面的力量解释Foo=
仿佛美孚是不是有你更抗跌。
我觉得我至少在正确的轨道作为之所以在这里 - 和至少部分有事情做了“succcessful控制”的概念。
解决方案
空更能代表它实际上是什么,以及它与其他可空类型,除了字符串兼容,所以我想这是由设计。
其他提示
我更喜欢V1的行为。您将如何能够通过v2的一个空字符串?另外,与后者你不能告诉FOO是否处于查询参数或没有。
配置将取代V2(或V1)的默认模型绑定得到一致的行为的一种方法。我宁愿空,我自己。