在 ASP.NET MVC 中,此处的 HtmlHelper 代码会生成一个复选框:
<%= Html.CheckBox("List_" + mailingList.Key, true) %>
作为这个 HTML:
<input id="List_NEW_PRODUCTS" name="List_NEW_PRODUCTS" type="checkbox" value="true" />
<input name="List_NEW_PRODUCTS" type="hidden" value="false" />
如果您想知道为什么会有一个额外的隐藏字段?- 然后 读这个。它绝对是一个让您首先想到“hmmmmm”的解决方案,但随后您意识到它是一个非常优雅的解决方案。
我遇到的问题是当我试图解析后端的数据时。好吧,如果将来在框架中发生任何变化,这与其说是一个问题,不如说是一个问题。
如果我使用内置绑定,一切都很好 - 这一切都为我完成了。但就我而言,我正在动态生成名称未知且模型中没有相应属性的复选框。
所以我最终不得不编写这样的代码:
if (forms["List_RETAIL_NOTIFICATION"] == "true,false") {
}
或这个:
if (forms.GetValues("List_RETAIL_NOTIFICATION")[0] == "true") {
}
这两个我仍然看和畏缩 - 特别是因为不能保证这将永远是返回值。我想知道是否有一种方法可以访问模型绑定器使用的抽象层 - 或者我是否坚持我的控制器“知道”这么多关于 HTTP POST hacks。
是的,我可能有点挑剔 - 但也许有更好的聪明方法使用模型绑定器,我可以使用它来读取动态创建的复选框参数。
此外,我希望这篇文章可以帮助其他人搜索:“真,假”。尽管我知道为什么会这样,但我只是忘记了,我花了一点时间才意识到“呃”。
仅供参考:我尝试了另外几件事,这就是我发现的:
forms["List_RETAIL_NOTIFICATION"]
评估为 "true,false"
forms.GetValues("List_RETAIL_NOTIFICATION")[0]
评估为 "true"
(forms.GetValue("List_RETAIL_NOTIFICATION").RawValue as string[])[0]
评估为 "true"
forms.GetValues("List_RETAIL_NOTIFICATION").FirstOrDefault()
评估为 "true"