これはjQueryとajaxを使って行うことができる。
あなたのカミソリビューは、このようなマークアップをレンダリングすると仮定します。
<select name="Manufacturer" id="Manufacturer">
<option value="1">Aaaaa</option>
<option value="2">Bbbbb</option>
<option value="3">Ccccc</option>
</select>
<select name="Model" id="Model">
</select>
今最初のselect要素の変更イベントをリッスンし、選択されたオプションの値を取得し、AJAXを使用してサーバーに送信され、あなたのページにこのJavaScriptを持っています。あなたのサーバーアクションメソッドがモデルをメーカーIDに属するものとして返すようにします。お使いのモデルのアクションメソッドを想定し
$(function(){
var urlForModesl = "/Manufacturer/Models";
$("#Manufacturer").change(function(){
var manufacturerId= $(this).val();
$.getJSON(urlForModesl,function(data){
var modelsHtml="";
$.each(data,function(a,b){
modelsHtml+="<option value='"+b.Id+"'>"+b.Name+"</option>";
});
$("#Model").html(modelsHtml);
});
});
});
は、JSON形式のIDと名前プロパティを持つオブジェクトのリストを返します。
public ActionResult Models(int id)
{
var list= db.ModelManufactors.Where(s=>s.ManufacturerId==id)
.AsEnumerable()
.Select(s=> new { Id=s.ManufacturerModelId, Name=s.Name}).ToList();
return Json(list,JsonRequestBehaviour.AllowGet);
}
これは「カスケードドロップダウン」と呼ばれることが多く、オンラインで利用できる例が多数あります。基本的に、最初のドロップダウンの変更イベントに応答して、2番目のドロップダウンの値を入力します。これらの値はJavaScriptでクライアント側に存在することができ、AJAX経由でフェッチすることができます。おそらく、AJAXベースのすぐれたコントロールが役立ちます。 – David