带有Bootstrap切换开关值的ASP .NET MVC CheckBoxFor Helper始终为false

时间:2017-03-14 08:27:51

标签: asp.net asp.net-mvc twitter-bootstrap checkbox toggle

我在这样的视图中使用bootstrap-toggle和Html.CheckBoxFor()帮助器:

 @Html.CheckBoxFor(m => m.issueFlag, 
                   new { id = "toggle-switch", 
                         data_toggle = "toggle", 
                         data_size = "normal", 
                         data_on = "Issue on Invoice", 
                         data_off = "No Issue on Invoice",
                         data_onstyle="danger", 
                         data_offstyle="success", 
                         data_width = "200" })

交换机出现并按预期在前端运行,但是在提交表单时,该值始终为false。在控制器中正确捕获表单中的其他内容,如复选框,下拉菜单和文本框。控制器中的POST操作声明为:

[HttpPost]
[AuthorizeRights(Rights = "Viper_ViewAudit,Viper_EditAudit")]
public ActionResult ShowImage(PDFViewer pdfViewerModel, string Command)
{
  ... content ...
} 

我在某处做错了吗?为什么m.issueFlag总是假的?

(我将提供更多需要的代码,我不确定还有什么相关的内容。)

更新 生成的HTML是

<input data-off="No Issue on Invoice" data-offstyle="success" 
       data-on="Issue on Invoice" data-onstyle="danger" data-size="normal"               
       data-toggle="toggle" data-val="true" 
       data-val-required="The issueFlag field is required." data-width="200"               
       id="toggle-switch" name="issueFlag" type="checkbox" 
       value="true" />
<input name="issueFlag" type="hidden" value="false" />

我现在也尝试过直接输入标签而不使用帮助器而没有任何改变。

1 个答案:

答案 0 :(得分:1)

从对象html属性中删除( id =&#34;切换开关&#34; ),因为您将主ID( issueFlag )覆盖为(扳钮开关)。

如果你对bootstrap-toggle有问题,只需使用jquery并添加如下属性:

 @Html.CheckBox("abc", new { @class="abc1"});

 <script>
    function f() {
      $('.abc1').attr('data-toggle', 'toggle')
        .attr('data-onstyle', 'success')
        .attr('data-offstyle', 'danger')
    };
    f();
 </script>