ViewBag
やのような動的なものは避けてくださいViewData
。強く型付けされたビューを使用します。
ViewModelは、ビューとアクションメソッドの間でデータを転送するために使用する単なるPOCOクラスです。ビューに固有になります。
例:商品を作成するビューを作成する場合。したがって、このようなビューモデルを作成します
public class Product
{
public string Name { set;get;}
public IEnumerable<SelectListItem> Categories{ get; set; }
public string SelectedCategoryId { get; set; }
//Other Properties as needed
}
ここで、GET
アクションメソッドで、このビューモデルのオブジェクトを作成し、値を初期化してビューに送信します。
public ActionResult Create()
{
var vm=new Product();
vm.Categories=userRepository.Getddl().
Select(c => new SelectListItem
{
Value = c.DropDownID.ToString(),
Text = c.DropDownText
});
return View(vm);
}
Product
次に、ビューをクラスに強く型付けして、Html.DropDownListFor
ヘルパーメソッドを使用します。
@model PersonsProduct
@using (Html.BeginForm())
{
@Html.DropDownListFor(x => x.SelectedCategoryId,
new SelectList(Model.Categories,"Value","Text"), "Select")
<input type="submit" value="save" />
}
これで、HttpPostで、次のようなフォーム値を取得できます。
[HttpPost]
public ActionResult Create(Product model)
{
if(ModelState.IsValid)
{
//check model.SelectedCategoryId
//save and redirect
}
//to do :reload the dropdown again.
return view(model);
}