内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
现在是ASP.NET MVC 2的默认值(至少对于预览版1)。
当像这样建模查询字符串时:
?Foo=&Bar=cat
发生以下绑定(假设您使用'Foo'和'Bar'字符串属性绑定到模型)
ASP.NET MVC 1
model.Foo = "";
model.Bar = "cat":
ASP.NET MVC 2(预览1到RC)
model.Foo = null;
model.Bar = "cat":
想要给任何玩V2的玩家提高警惕,因为这在' gu-notes '中没有提到。也很好奇,如果有人知道可以评论这是否是最终实现或可配置功能?我很好,但只希望他们不要改回旧的方式!可配置性会更好。
从这一点来学习的教训是,无论正在开发什么版本,都不要编写代码,指出Foo.Length == 0测试空字符串,或者使用Foo.Length> 3来检查最小长度。使用string.IsNullOrEmpty(Foo)和/或先检查null。
这个问题引发了我的好奇心,为什么他们会实际做出这样的改变。我认为我在研究残疾人控制时偶然发现了答案。W3 HTML规范定义了一个“ 成功的控制 ”,如下所示:
提交成功的控件是“有效的”。每个成功的控件都将其控件名称与其当前值配对,作为提交的表单数据集的一部分。必须在FORM元素中定义一个成功的控件,并且必须具有控件名称。
换句话说 - 一个成功的控件就是将它作为查询字符串参数返回到服务器的控件。现在,如果控件没有有效的值,那么根据规范:
如果控件 在提交表单时没有当前值,则用户代理不需要将其视为成功的控件。
所以我认为通过发送null而不是空字符串,可以减少浏览器在某些浏览器可能发送时的不兼容性,Foo=&Bar=
而其他浏览器甚至可能不会发送该查询字符串参数。通过总是诠释Foo=
,如果Foo在所有部队中都不存在,那么你会更加防守。
我认为我至少在正确的轨道上说明这里的原因 - 至少部分与“成功控制”的概念有关。