jQuery-UI Sortableで通常のチェックボックスを使用しないのはなぜですか?
<ul id="sortable" class='ckb-list'>
<li><input id="chb-1" type="checkbox" value="1"/> Checkbox 1</li>
<li><input id="chb-2" type="checkbox" value="2"/> Checkbox 2</li>
<li><input id="chb-3" type="checkbox" value="3"/> Checkbox 3</li>
<li><input id="chb-4" type="checkbox" value="4"/> Checkbox 4</li>
<li><input id="chb-5" type="checkbox" value="5"/> Checkbox 5</li>
</ul>
そして適用する
$(function() {
// sortable methods
$( "#sortable" ).sortable();
$( "#sortable" ).disableSelection();
// retrieve selection list
$(".btn-save").bind("click", function() {
var ids = "",
iBox = 0;
// foreach input in .ckb-list
$(".ckb-list li > input").each(function() {
if($(this).prop("checked")) {
// it checked, so, we save
ids += ++iBox + ". " + $(this).attr("id") + "\n";
}
});
alert("the checkboxes selected and sorted are:\n\n" + ids);
});
});
JSBIN での実際の例
<input id="chb-5" type="checkbox" value="5"/> Checkbox 5
かみそりの構文で簡単に変換できます。
@Html.Checkbox("chb-5", Model.CheckBox5Value)
永続化のために必要なことは、HTML を正しい順序で記述することだけです。次の表をイメージしてみましょう。
[TblUserOptions]
UserOption_id
Option_id
Value
Order
あなたがする必要があるのは次のとおりです。
<ul id="sortable" class='ckb-list'>
@foreach(var option in Model.TblUserOptions
.OrderBy(x => x.Order)
.ThenByDescending(x => x.Option_id))
{
<li>@Html.Checkbox("chb-" + option.Option_id, option.Value)</li>
}
</ul>
チェックボックスは開始時に常に正しくソートされています。保存時に必要なことは、すべてのチェックボックスをループして新しいOrder
値を更新することだけです。