在ASP.NET MVC复选框通过的HtmlHelper代码在这里产生的FormsCollection物体接收MVC复选框值的解释:抽象通过
<%= 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" />
万一你想知道为什么有一个额外的隐藏领域? - 然后read this。它绝对是一个让你首先想到'嗯'的解决方案,但是你意识到它是一个非常优雅的解决方案。
我遇到的问题是当我试图解析后端数据。那么它的问题就不那么重要了,如果将来有什么事情要在框架中改变的话。
如果我使用内置的绑定,一切都很棒 - 它为我完成。但在我的情况下,我动态生成未知名称复选框,并在我的模型中没有相应的属性。
所以,我最终不得不像这样写代码:
if (forms["List_RETAIL_NOTIFICATION"] == "true,false") {
}
或本:
if (forms.GetValues("List_RETAIL_NOTIFICATION")[0] == "true") {
}
这两者我还是看和畏缩 - 尤其是因为世界上没有保证,这将始终成为回报价值。我想知道是否有一种方法可以访问模型绑定器所使用的抽象层 - 或者如果我与我的控制器卡在一起,“知道”这些关于HTTP POST hack的内容。
是的我可能会有点挑剔 - 但也许是一个更聪明的方式使用模型绑定,我可以用来读取动态创建的复选框参数。
此外,我希望这篇文章可以帮助其他人搜索:“真实的,错误的”。尽管我知道它为什么这样做,我只是忘了,花了一点时间才意识到'呃'。
FYI:我试过其他一些东西,这是我发现:
forms["List_RETAIL_NOTIFICATION"]
评估为“真,假” forms.GetValues("List_RETAIL_NOTIFICATION")[0]
评估为“真” (forms.GetValue("List_RETAIL_NOTIFICATION").RawValue as string[])[0]
评估为“真” forms.GetValues("List_RETAIL_NOTIFICATION").FirstOrDefault()
评估板为 “true”
谢谢,但正如我所说的“我动态生成名称未知且在我的模型中没有相应属性的复选框”。复选框表示用户可以注册的所有不同邮件列表 - 这是数据库驱动的 – 2009-02-03 22:33:55