【问题标题】:set unchecked value of checkbox设置复选框的未选中值
【发布时间】:2011-02-24 09:09:09
【问题描述】:

有没有办法设置复选框的默认未选中值? 我没有使用数据绑定控件。 这是从表单传递数据,并且希望它在未选中时传递 false 而不是 null。

【问题讨论】:

    标签: asp.net html asp.net-mvc


    【解决方案1】:

    是的,使用默认的HtmlHelpers 将为您实现这一目标

    <%: Html.Checkbox("myCheckbox") %>
    

    或使用 Razor

    @Html.Checkbox("myCheckbox")
    

    Checkbox() 方法将在输入 type="checkbox" 旁边呈现一个 input type="hidden" 字段,当复选框未选中时,该字段将提交值 false

    <input id="myCheckbox" name="myCheckbox" type="checkbox" value="true" />
    <input name="myCheckbox" type="hidden" value="false" />
    

    如果您想提交除false 以外的值,则应自己渲染复选框和隐藏字段,并将隐藏字段的值设置为默认值。请注意,它们必须具有相同的 name 属性。

    【讨论】:

    • 我完全错过了 mvc 标签。嗬! ;)
    • 我发现使用隐藏值技术只有在隐藏输入值出现在表单中的首位时才有效(仅在 Chrome 18 上测试过)。
    【解决方案2】:

    这可以通过在表单中​​添加一个额外的控件来实现:

    <input type="hidden" name="checkbox1" value="off">
    <input type="checkbox" name="checkbox1" value="on"> My checkbox
    

    这样,如果不选中,您的复选框就有了默认值。如果选中,则复选框将覆盖隐藏字段,以便复选框和隐藏字段必须具有相同的名称。

    【讨论】:

    • 你确定吗?通常当你有同名的双元素时,它们会以某种形式的数组发送到服务器。
    • @Sam 是的,这是 ASP.NET MVC 在使用 @Html.CheckBox() HtmlHelper 方法时的方式。
    • @David Glenn:对于两个复选框,如果选中复选框,则表单提交在帖子数据中返回“false,on”,如果未选中则返回“false”。 jquery serialize() 方法似乎只有在这种情况下选中复选框时才返回“on”。所以这个答案有点不正确
    • 是的,我试过了,表单将这两个值都传递给了响应,而不是让复选框值覆盖隐藏值。对我不起作用。
    【解决方案3】:

    我是用 Razor 做的,对我有用

    获取价值

    bool CashOnDelivery = Product.CashOnDelivery == null ? false : Convert.ToBoolean(Product.CashOnDelivery);
    

    剃刀视图

    @Html.CheckBox("CashOnDelivery", CashOnDelivery) (Not nullable bit)
    

    Razor 不支持可为空的 bool

    在C#端

     Insert.CashOnDelivery = Convert.ToBoolean(Collection["CashOnDelivery"].Contains("true")?true:false);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      相关资源
      最近更新 更多