asp.net-mvc - 为什么ASP.NET MVC Html.CheckBox输出两个具有相同名称的INPUT?

标签 asp.net-mvc

为什么在世界范围内这样做:

<%= Html.CheckBox("ForSale", Model.Product.ForSale)%> For Sale

产生以下HTML:
<input id="ForSale" name="ForSale" type="checkbox" value="true" />
<input name="ForSale" type="hidden" value="false" />
For Sale

现在,每当我选中该框并访问Request.Form["ForSale"]时,我都会得到"true,false"的荒谬答案。我应该解析吗?

对于其他HtmlHelper控件,不会显示此隐藏字段,那么为什么对CheckBox来说却如此?

如何关闭这个愚蠢的“功能”? 还是HtmlHelper不再有用呢?

更新

从下面的答案看来,这背后有一些逻辑。我准备了一些扩展方法,因此不必考虑(由于@ eu-ge-ne):
    public static bool GetCheckBoxValue(this System.Web.HttpRequestBase req, 
                                        string name) {
        return Convert.ToBoolean(req.Form.GetValues(name).First());
    }

最佳答案

如果未选中,它将强制包含该字段。如果取消选中复选框,则不会将其作为页面的一部分发送-仅在选中复选框后才发送,然后值为true。隐藏字段可确保如果未选中此复选框,则将发送false,因为始终会发送隐藏字段。

关于asp.net-mvc - 为什么ASP.NET MVC Html.CheckBox输出两个具有相同名称的INPUT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1127357/

相关文章:

jquery - 对自定义属性执行客户端验证

c# - asp.net mvc core 如何返回 Json 查询

asp.net-mvc - 如何使用 MVC Controller 返回 JSON

c# - 如何在 asp.net MVC 5 中创建表单

jquery - 在Asp.net mvc中的jqGrid中添加自己的搜索参数

asp.net - 在身份验证 Cookie 上设置域会破坏 MVC 中的身份验证

asp.net-mvc - NHibernate:如何使用每个请求 session 模式处理基于实体的验证,而 Controller 不知道 ISession

asp.net-mvc - 如何在 ASP.NET MVC5 中配置 structuremap.MVC 5 以忽略框架接口(interface)/类实例

ASP.NET HttpContext.Current 在 Task.Run 中

c# - ItextSharp 在尝试打印时需要一个 Dict 对象