gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 2 中空查询字符串参数的模型绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 14:20:12 25 4
gpt4 key购买 nike

行为described here现在似乎是 ASP.NET MVC 2 的默认设置(至少对于 Preview 1)。

当对这样的查询字符串进行建模时:

 ?Foo=&Bar=cat 

发生以下绑定(bind)(假设您绑定(bind)到具有 '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 规范定义了一个 ' successful control ' 如下 :

A successful control is "valid" for submission. Every successful control has its control name paired with its current value as part of the submitted form data set. A successful control must be defined within a FORM element and must have a control name.



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

If a control doesn't have a current value when the form is submitted, user agents are not required to treat it as a successful control.



(在这里用“不需要……”来发现“开放解释”的语言)

所以我认为通过发送 null 而不是空字符串可以减少某些浏览器可能发送的浏览器不兼容问题 Foo=&Bar=其他人甚至可能不会发送该查询字符串参数。通过始终解释 Foo=就好像 Foo 根本不存在一样,迫使您更加防御。

我认为我至少对这里的原因是正确的 - 至少部分与“成功控制”的概念有关。

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

最佳答案

Null 更能代表它的实际含义,并且它与字符串以外的其他可为空的类型兼容,所以我想它是设计使然。

关于asp.net-mvc - ASP.NET MVC 2 中空查询字符串参数的模型绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1263563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com