@ 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>
トグルボタンは、チェックされている場合にのみ機能し、コントローラーにポストバックします:
それ以外の場合は、デフォルトでコントローラにポストバックされません。
どんな助けでも感謝します!ありがとう!
いくつかの実験と調査結果に基づいて、ヘルパーによって生成された隠しフィールド(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
参照:
これは非常に簡単です。プロジェクトに実装しました。チェックボックスの値を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を適宜変更してください。