Sim*_*ver 17 asp.net-mvc preview modelbinders
此处描述的行为现在似乎是ASP.NET MVC 2的默认行为(至少对于预览1).
当像这样对一个查询字符串进行模型绑定时:
?Foo=&Bar=cat
Run Code Online (Sandbox Code Playgroud)
发生以下绑定(假设您绑定到具有'Foo'和'Bar'字符串属性的模型)
ASP.NET MVC 1
model.Foo = "";
model.Bar = "cat":
Run Code Online (Sandbox Code Playgroud)
ASP.NET MVC 2(预览1到RC)
model.Foo = null;
model.Bar = "cat":
Run Code Online (Sandbox Code Playgroud)
想要给任何正在玩V2的人提供一个单挑,因为这在' gu-notes '中没有提到.同样好奇的是,知道的任何人都可以评论这是否是最终实施或可配置功能?无论哪种方式我都很好但只是希望他们不要回到过去的方式!可配置会更好.
编辑:从这一点学习的教训是你正在开发的任何版本,不要编写代表Foo.Length == 0来测试空字符串或Foo.Length> 3以检查最小长度.使用string.IsNullOrEmpty(Foo)和/或首先检查null.
更新:这个问题激起了我对他们为什么会真正做出这种改变的好奇心.我认为在研究残疾人控制时我偶然发现了答案.W3 HTML规范定义了" 成功控制 ",如下所示:
成功的控制对于提交是"有效的".每个成功的控件都将其控件名称与其当前值配对,作为提交的表单数据集的一部分.必须在FORM元素中定义成功的控件,并且必须具有控件名称.
换句话说 - 成功的控件是将其作为查询字符串参数返回服务器的控件.现在,如果控件没有有效值,那么根据规范:
如果控件 在提交表单时没有当前值,则用户代理不需要将其视为成功控件.
(在这里找到'开放式解释'语言'不要求......')
所以我认为通过发送null而不是空字符串,它可以减少某些浏览器可能发送的浏览器不兼容性,Foo=&Bar=而其他浏览器可能甚至不会发送该查询字符串参数.通过总是解释Foo=好像Foo不存在,所以你要更加防守.
我认为我至少在正确的轨道上找到了原因 - 至少在某种程度上与'成功控制'的概念有关.
| 归档时间: |
|
| 查看次数: |
1715 次 |
| 最近记录: |