首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET MVC2中空查询字符串参数的模型绑定

ASP.NET MVC2中空查询字符串参数的模型绑定
EN

Stack Overflow用户
提问于 2009-08-11 23:40:47
回答 3查看 1.8K关注 0票数 17

行为described here现在似乎是ASP.NET MVC2的默认设置(至少对于预览版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":

因为在“gu-notes”中没有提到这一点,所以我想给任何玩V2的人提个醒。同样好奇的是,是否有知情人士可以评论这是最终的实现还是可配置的功能?无论哪种方式,我都很好,但只希望他们不会回到原来的方式!如果是可配置的就更好了。

编辑:从这一点上学到的教训是,无论你开发的是什么版本,都不要编写代码,不要写Foo.Length == 0来测试空字符串,或者Foo.Length >3来检查最小长度。先使用string.IsNullOrEmpty(Foo)和/或检查null。

更新:这个问题激起了我的好奇心,为什么他们会做出这样的改变。我想我是在研究禁用控件的时候偶然发现了答案。W3 HTML规范定义了一个'successful control‘,如下所示:

成功的控件对于提交是“有效的”。每个成功的控件都有与其当前值成对的控件名称,作为提交的表单数据集的一部分。成功的控件必须在表单元素中定义,并且必须具有控件名称。

换句话说,成功的控件是将其作为查询字符串参数返回服务器的控件。现在,如果一个控件没有有效的值,那么根据规范:

如果提交表单时控件没有current value,则不需要用户代理将其视为成功的控件。

(在这里用“不需要...”来指出“开放解释”的语言)

所以我认为通过发送null而不是空字符串,可以减少浏览器的不兼容性,某些浏览器可能会发送Foo=&Bar=,而其他浏览器可能甚至不会发送查询字符串参数。总是把Foo=解释得好像Foo根本不存在,这迫使你变得更具防御性。

我认为我至少在正确的轨道上解释了为什么会出现这种情况--至少在一定程度上与“成功控制”的概念有关。

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

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1263563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档