HTML.Checkboxfor切换按钮HTML?

Edw*_*d.K 7 html asp.net-mvc html-helper css3 asp.net-mvc-4

无论如何将@ HTML.Checkboxfor转换为切换html按钮?我参考了https://www.w3schools.com/howto/howto_css_switch.asp中的切换按钮样式

目前其工作使用:

@Html.CheckBoxFor(model => model.IsEnabled, new { @checked = "checked", @Name = "DelegateChkBox" })
Run Code Online (Sandbox Code Playgroud)

变成:

    <td class="slider-td">
         <label class="switch">
            <input name="DelegateChkBox" id="IsEnabled" type="checkbox" value="true" data-val-required="The IsEnabled field is required." data-val="true" data-bind="checked: IsEnabled">
          <div class="slider round"></div>
          </label>
   </td>
Run Code Online (Sandbox Code Playgroud)

切换按钮仅在CHECKED检查时工作并回发到控制器: 在此输入图像描述

否则它默认情况下不会回发到控制器UNCHECKED:

在此输入图像描述

任何帮助将不胜感激!谢谢!

Tet*_*oto 9

基于一些实验和发现,我发现你需要包含helper(Html.CheckBoxFor)生成的隐藏字段,如下面的样式所示:

<style type="text/css">
.switch {
  position: relative;
  display: inline-block;
  width: 60px;
  height: 34px;
}

.switch input {display:none;}

.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc;
  transition: .4s;
}

.slider:before {
  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  left: 4px;
  bottom: 4px;
  background-color: white;
  transition: .4s;
}

/* include generated hidden field here */
input[type="checkbox"]:checked + input[type="hidden"] + .slider,
input[type="checkbox"]:checked + .slider {
  background-color: #2196F3;
}

/* include generated hidden field here */
input[type="checkbox"]:focus + input[type="hidden"] + .slider,
input[type="checkbox"]:focus + .slider {
  box-shadow: 0 0 1px #2196F3;
}

/* include generated hidden field here */
input[type="checkbox"]:checked + input[type="hidden"] + .slider:before,
input[type="checkbox"]:checked + .slider:before {
  transform: translateX(26px);
}

/* Rounded sliders */
.slider.round {
  border-radius: 34px;
}

.slider.round:before {
  border-radius: 50%;
}
</style>
Run Code Online (Sandbox Code Playgroud)

查看用法示例(只需更改<input type="checkbox" />@Html.CheckBoxFor):

<label class="switch">
    @Html.CheckBoxFor(model => model.IsEnabled)
    <div class="slider round">
    </div>
</label>
Run Code Online (Sandbox Code Playgroud)

为了确保在回发之前在客户端检查复选框,您可以使用下面的jQuery代码:

// change event may modified to other events
$("#IsEnabled").change(function () {

    // check if checkbox is being checked
    // taken from /a/23007488 by Alexandru Chichinete
    if ($("#IsEnabled").is(":checked"))
    {
        // enable form submit
    }
});
Run Code Online (Sandbox Code Playgroud)

演示示例:.NET Fiddle

参考文献:

MVC 4中的样式复选框

如何在MVC 5中将CSS样式应用于Html.CheckBoxFor

@ Html.checkboxfor - 使用id获取复选框值

  • AFAIK,相邻的选择器在这里只是最小的(当然兄弟选择器也可以工作),只有当OP想要根据检查值提交表单时才使用JS部分. (2认同)