Razor ViewEngine HTML.Checkbox 方法创建一个隐藏的输入。为啥? [复制]
Posted
技术标签:
【中文标题】Razor ViewEngine HTML.Checkbox 方法创建一个隐藏的输入。为啥? [复制]【英文标题】:Razor ViewEngine HTML.Checkbox method creates a hidden input. Why? [duplicate]Razor ViewEngine HTML.Checkbox 方法创建一个隐藏的输入。为什么? [复制] 【发布时间】:2011-07-24 16:39:00 【问题描述】:我在我的视图页面上写了下面的代码;
@html.CheckBox("ChxName",true)
我得到了以下结果;
<input checked="checked" id="ChxName" name="ChxName" type="checkbox" value="true" />
<input name="ChxName" type="hidden" value="false" />
为什么会有一个和checkbox同名的input元素?
【问题讨论】:
【参考方案1】:未选中的复选框不会发布,因此隐藏字段(设置为 false)允许模型绑定仍然有效。
查看回帖上的 Request.Form。如果选中该复选框,您将看到:
ChxName=true&ChxName=false
模型绑定器使用第一个值。
如果未选中该框,您将看到:
ChxName=false
【讨论】:
也就是说,这个复选框将作为假传递给控制器? 仅当未选中该框时。如果它被选中,它将与 true 绑定。用调试器试一试。另外,在没有 HTML 帮助器的情况下尝试一下,你就会明白他们为什么这样做了。 据我了解,如果选中复选框并且控制器在此之后获取隐藏字段的值,则隐藏字段值变为真。我在这儿跟着你对吗? 不,隐藏值将总是为假,并且总是发布。如果选中该框,也会发布一个 true 并且模型绑定器使用该 true 值。这是一个常见的问题,所以如果你仍然不明白或者只是看一下 mvc 源代码,你可能想谷歌一下。 没问题——这是另一个可以更好地解释它的 SO 答案:***.com/questions/2697299/…【参考方案2】:ericvg 解释的很好。
手动方法是这样的:
bool IsDefault = (Request.Form["IsDefault"] != "false");
【讨论】:
【参考方案3】:或者使用我觉得更简洁的 Contains("true")...
bool myCheckBoxValue = Server.HtmlEncode(Request.QueryString["MyCheckBoxValue"]).Contains("true");
【讨论】:
以上是关于Razor ViewEngine HTML.Checkbox 方法创建一个隐藏的输入。为啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
MVC ViewEngine视图引擎解读及autofac的IOC运用实践
关于 razor,.NET MVC 对 razor 的支持与 .NET razor pages 有啥区别,有啥叫做 .NET MVC razor pages 的东西吗?