アクションメソッドのメソッドパラメータを確認し、それに基づいてさまざまなビューを返します。このようなもの。
public ActionResult GetInfo(string id,string vehicleTypId)
{
if(String.IsNullOrEmpty(vehicleTypeId))
{
var vehicle=GetVehicleType(vehicleTypId);
return View("ShowSpecificVehicle",vehicle) ;
}
var genericVehicle=GetVehicle(id);
return View(genericVehicle);
}
編集:そう言って、私はあなたがそれらを2つの別々のアクションメソッドに保つべきだと真剣に考えています。これにより、コードがクリーンで読みやすくなります。両方のアクションメソッドIDが必要な場合は、共通の機能を関数に移動して呼び出すことができます。だから私はこのようにそれをします
最初のページにViewModelがあると仮定します(すべての車両タイプを表示します)
public class VehicleTypesViewModel
{
//other relevant properties
public IEnumerable Types { set;get;}
public int SelectedTypeId { set;get;}
}
初期ビューに対するGETリクエストは、このアクション結果によって処理されます。すべてのVehicleタイプを取得し、それをViewModelsTypesプロパティのビューに返します。
public ActionResult VehicleTypes()
{
VehicleTypesViewModel objVM=new VehicleTypesViewModel();
objVM.Types=dbContext.VehicleTypes.ToList();
return View(objVM);
}
そして、VehicleTypes.cshtmlと呼ばれるビューでは、
@model VehicleTypesViewModel
@using(Html.BeginForm())
{
@Html.DropDownListFor(Model.SelectedTypeId,new SelectList(Model.Types,"Text",Value"),"Select")
<input type="submit" value="Go" />
}
フォーム投稿を処理するための別のアクションメソッド。ここで選択したタイプIDがあり、ここで特定の詳細を取得して、別のビューを返すことができます
[HttpPost]
public ActionResult VehicleTypes(VehicleTypesViewModel model)
{
// you have the selected Id in model.SelectedTypeId property
var specificVehicle=dbContext.Vehicles.Where(x=>x.TypeId=model.SelectedTypeId);
return View("SpecificDetails",specificVehicle);
}
または、RedirecToActionメソッドを使用して、特定の車両に対してGetリクエストを実行することもできます。PRGパターンに固執するため、このアプローチをお勧めします。
[HttpPost]
public ActionResult VehicleTypes(VehicleTypesViewModel model)
{
int typeId=model.SelectedTypeId;
return RedirectToAction("GetVehicle",new {@id=typeId});
}
public ActionResult GetVehicle(int id)
{
var specificVehicle=dbContext.Vehicles.Where(x=>x.TypeIdid);
return View(specificVehicle);
}
Javascriptを使用する場合: JavaScriptから新しいビューへのget呼び出しを行うこともできます。コントローラへのHTTPpostなし。そのために、最初のビューにJavaScriptを追加する必要があります
@model VehicleTypesViewModel
//Include jQuery library reference here
@Html.DropDownListFor(Model.SelectedTypeId,new SelectList(Model.Types,"Text",Value"),"Select")
<script type="text/javascript">
$(function(){
$("#SelectedTypeId").change(){
window.location.href="@Url.Action("GetVehicle","Yourcontroller")"+"/"+$(this).attr("id");
});
});
</script>