1)ユーザーが最初のドロップダウンを選択したときに、jQueryajaxを使用して2番目のドロップダウンのアイテムを取得できます。
カテゴリクラスが次のようになっていると仮定します
public class Category
{
public ID { set;get;}
public string Name { set;get;}
}
ビューのドロップダウンは次のようになります
@Html.DropDownListFor(x => x.SelectedCategoryID,
new SelectList(Model.Categories, "ID", "Name"), "Select")
@Html.DropDownListFor(x => x.SelectedSubCategoryID,
new SelectList(Model.SubCategories, "ID", "Name"), "Select")
ここで、最初のドロップダウンの変更イベントをリッスンして値を取得するJavaScriptをいくつか用意し、カテゴリIDを受け入れるactionメソッドをajaxで呼び出し、サブカテゴリのリストをJSON
形式で返します。
<script type="text/javascript">
$(function () {
$("#SelectedCategoryID").change(function () {
var self = $(this);
var items="";
$.getJSON("@Url.Action("Index", "GetSubCategories")?id="+self.val(),
function(data){
$.each(data,function(index,item){
items+="<option value='"+item.ID+"'>"+item.Name+"</option>";
});
$("#SelectedSubCategoryID").html(items);
});
});
});
</script>
これGetSubCategories
で、(サブ)カテゴリのリストをJSON
フォーマットで返すアクションメソッドができました。
public ActionResult GetSubCategories(int id)
{
List<Category> subCategoryList=new List<Category>();
//to do : fill the list of (sub) categories to the
// above list for the category id passed to this method.
return Json(subCategoryList,Json.RequestBehaviour.AllowGet);
}
2)セッションは良いはずです。