がdata=*
属性を持つ<option>
要素を生成できるようにするために、あなたは属性の追加のプロパティを持つSelectListItem
に基づいてクラスを所有して作成する必要があり、その後、あなたはSystem.Web.Mvc.SelectExtensionsクラスのコードに基づいてHtmlHelperの拡張メソッドを所有して生成されます。これを処理する
はるかに簡単な方法は、あなたが、ビューにSelectList
を構築javascript配列に代入して、チェックボックス.click()
イベントを処理し、オプションのリストを再構築するためのjavascript/jqueryのを使用するために使用するコレクションを渡すことであろう<select>
要素にあります。あなたのケースでは、単にチェックボックスの値に基づいて項目を隠す/表示する場合があります。あなたが唯一の地元で作られた製品にその選択を制限するために、製品を選択して、チェックボックスを含めるようにビューを持っている場合
たとえば、あなたのモデルは
public class MyViewModel
{
public bool UseLocalProductOnly { get; set }
public int SelectedProduct{ get; set; }
public IEnumerable<SelectListItem> ProductList { get; set; }
public IEnumerable<int> LocalProducts { get; set; }
}
public class Product
{
public int ID { get; set; }
public string Name { get; set; }
public bool IsLocalProduct { get; set; }
}
とコントローラであるかもしれない
var products = db.Products;
MyViewModel model = new MyViewModel()
{
ProductList = new SelectList(products, "ID", "Name"),
LocalProducts = products.Where(x => x.IsLocalProduct).Select(x => x.ID)
}
return View(model);
とビューの
@Html.CheckBoxFor(m => m.UseLocalProductOnly)
@Html.DropDownListFor(m => m.SelectedProduct, Model.ProductList)
<script>
var localProducts = @Html.Raw(Json.Encode(Model.LocalProducts))
var select = $('#SelectedProduct');
var options = select.children('option');
$('#UseLocalProductOnly').click(function() {
if ($(this).is(':checked')) {
// reset the selected option if it would otherwise be hidden
if ($.inArray(Number(select.val()), localProducts) === -1) {
select.val(localProducts[0]);
}
// hide options that are not local products
$.each(options, function() {
if ($.inArray(Number($(this).val()), localProducts) === -1) {
$(this).hide();
}
});
} else {
// show all options
productOptions.show();
}
});
</script>
代わりにあなたはを使用することができます(またはfalse
)を使用すると、オプションを有効または無効にすることができます。
HtmlHelper拡張メソッドを使用するには、(例えば) 'SelectListItemWithAttribute'クラスを作成し、[System.Web.Mvc.SelectExtensions]のコードの大部分を書き直すことに基づいて独自の拡張メソッドを作成する必要があります。 (https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/Html/SelectExtensions.cs)クラス。なぜあなたは '
このリストの上にチェックボックスがあります。ユーザーがチェックボックスをクリックすると、data-x = "true"の項目のみがこのリストに表示されます。ユーザーがチェックボックスをクリックしないと、すべての項目が表示されます(data-x = "true"およびdata-x = "false")。このロジックはチェックボックスが変更されるたびにクライアント側で実行されます。 – mameesh
これは、ajaxを使って(チェックボックスの値を渡して)サーバーメソッドを呼び出し、ドロップダウンリストに値を設定するオプションを返すか、オブジェクトの配列をjavascript配列に格納し、javascriptを使用してオプションを構築するチェックボックスの値に基づいて –