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控制”的概念。

http://www.w3.org /TR/html401/interact/forms.html#h-17.13.2

有帮助吗?

解决方案

空更能代表它实际上是什么,以及它与其他可空类型,除了字符串兼容,所以我想这是由设计。

其他提示

我更喜欢V1的行为。您将如何能够通过v2的一个空字符串?另外,与后者你不能告诉FOO是否处于查询参数或没有。

配置将取代V2(或V1)的默认模型绑定得到一致的行为的一种方法。我宁愿空,我自己。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top