行为described here似乎是ASP.NET MVC 2(至少对于预览版1)的默认值。在ASP.NET MVC 2中绑定空查询字符串参数
当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-notes”提及。也很好奇,如果有人知道可以评论这是否是最终实现或可配置功能?我很好,但只希望他们不要改回旧的方式!可配置性会更好。
编辑:从这个角度来吸取的教训是什么版本,你正在开发针对不写代码,说Foo.Length == 0来测试一个空字符串或Foo.Length> 3,确认最小长度。使用string.IsNullOrEmpty(Foo)和/或先检查null。
更新:这个问题引起了我的好奇,为什么他们会实际上使这一变化。我认为我在研究残疾人控制时偶然发现了答案。 W3的HTML规范定义了“successful control”如下:
一个成功的控制是“有效”的 提交。每个成功的控件 都将其控件名称与其当前值 配对,作为提交的 表单数据集的一部分。必须在FORM元素 内定义成功的控件 ,并且必须具有控件名称。
换句话说 - 一个成功的控制是一个将使其恢复到服务器作为查询字符串参数。现在,如果控制不具有有效的值,则依据规范:
如果控制不具有current value 形式提交时,用户 代理并不需要把它当作 成功控制。
(这里当场“开来解释”语言,“不要求......”)
所以我想通过发送一个空相反,它降低了浏览器兼容性能为空字符串,其中某些浏览器可能发送Foo=&Bar=
和其他人可能甚至不会发送该查询字符串参数。通过总是将Foo=
解释为好像Foo在所有部队中都不存在,那么你会更加防守。
我想我至少在正确的轨道上为什么在这里 - 至少部分与“成功控制”的概念有关。
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2
感谢您的信息,西蒙! – 2009-08-14 15:34:10
谢谢...这个让我很头疼的发现...我不知道为什么这个改变是通过...虽然没有真正增加任何价值,除了更多的工作对我们来说! 它与内存优化有关吗?一个空字符串在面对一个空值时会占用一些内存? – 2010-01-04 10:45:51
@jalchr - 我已经更新了我的问题,我认为他们为什么这样做的原因 – 2010-01-05 11:26:10