web-dev-qa-db-ja.com

HTML.CheckboxforでHTMLボタンを切り替えますか?

@ HTML.CheckboxforをトグルHTMLボタンに変換する方法はありますか? からトグルボタンのスタイルを参照しましたhttps://www.w3schools.com/howto/howto_css_switch.asp

現在、次を使用して動作しています:

@Html.CheckBoxFor(model => model.IsEnabled, new { @checked = "checked", @Name = "DelegateChkBox" })

変更:

    <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>

トグルボタンは、チェックされている場合にのみ機能し、コントローラーにポストバックします: enter image description here

それ以外の場合は、デフォルトでコントローラにポストバックされません。

enter image description here

どんな助けでも感謝します!ありがとう!

7
Edward.K

いくつかの実験と調査結果に基づいて、ヘルパーによって生成された隠しフィールド(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>

使用例を表示(変更するだけ<input type="checkbox" />から@Html.CheckBoxFor):

<label class="switch">
    @Html.CheckBoxFor(model => model.IsEnabled)
    <div class="slider round">
    </div>
</label>

ポストバックを行う前にチェックボックスがクライアント側でチェックされていることを確認するには、以下の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
    }
});

デモ例: 。NET Fiddle

参照:

MVC 4のスタイリングチェックボックス

CSSスタイルをMVC 5のHtml.CheckBoxForに適用するにはどうすればよいですか

@ Html.checkboxfor-idを使用してチェックボックスの値を取得

10

これは非常に簡単です。プロジェクトに実装しました。チェックボックスの値をHiddenForに保持するだけです。

@Html.HiddenFor(model => model.IsEnabled, new{@id = "DelegateChkBox"})

次に、ページにトグルボタンを表示します。例えば、

 <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>

したがって、ユーザーがチェックボックスをオン/オフにするときに、jqueryメソッドを呼び出して、@ Html.HiddenFor(..)に値を割り当てます。それでおしまい。

$('#IsEnabled').change(function(){
  if($(this).val()==true)
   {
    $('#DelegateChkBox').val(true);
   }
  else
   {
    $('#DelegateChkBox').val(false);
   }
})

これを一度チェックしてくださいif($( "this")。is( ":checked")代わりにif($(this).val( true))==それに応じて値を割り当てます。少し忙しい、私のコードをチェックできませんでした:)

それでおしまい。これで、ページをポストバックするときに、IsEnabledフィールドに既に値を設定しています。

Getメソッドでも同じようにする必要があります。 HiddenFor()の値を確認し、その値を取得して、jsのpageloadイベントのHTMLトグルボタンに割り当てるだけです。

$(function() {
 if($('#DelegateChkBox').val()== true)
  {
   $('#IsEnabled').prop("disabled", false);
  }
 else
  {
   $('#IsEnabled').prop("disabled", true);
  }
});

それでおしまい。 HTMLを適宜変更してください。

4
Basanta Matia