首先,嘗試避免使用ViewBag/ViewData等動態內容將數據從控制器傳輸到視圖。始終使用強類型的意見。
所以你會爲你的視圖創建一個視圖模型。
public class ProductViewModel
{
public int ProductID { set;get;}
public List<SelectListItem> Level1Items { set;get;}
public int Level1SelectedItem { set;get;}
public List<SelectListItem> Level2Items { set;get;}
public int Level2SelectedItem { set;get;}
public List<SelectListItem> Level3Items { set;get;}
public int Level3SelectedItem { set;get;}
public ProductViewModel()
{
Level1Items =new List<SelectListItem>();
Level2Items =new List<SelectListItem>();
Level3Items =new List<SelectListItem>();
}
}
並且在您的GET操作中,您將收集項目設置爲此viewmodel類的實例並將其發送到您的視圖。
public ActionResult Index()
{
var prodVM=new ProductViewModel();
prodVM.Level1Items=GetItemsForCategory(1);
prodVM.Leve21Items=GetItemsForCategory(2);
prodVM.Leve31Items=GetItemsForCategory(3);
return View(prodVM);
}
假設GetItemsForCategory方法接受類別ID,並從數據源
public List<SelectListItem> GetItemsForCategory(categoryId)
{
// to do :return the List of SelectListItem for each categoryID
}
現在在你的強類型查看返回SelectListItems的列表,
@model ProductViewModel
@using(Html.BeginForm())
{
Level 1 :
@Html.DropDownListFor(m => m.Level1SelectedItem ,
new SelectList(Model.Level1Items,"Value", "Text")"Select")
Level 2 :
@Html.DropDownListFor(m => m.Level2SelectedItem ,
new SelectList(Model.Level2Items,"Value", "Text")"Select")
Level3 :
@Html.DropDownListFor(m => m.Level3SelectedItem ,
new SelectList(Model.Level3Items,"Value", "Text")"Select")
<input type="submit" />
}
而在你HTTPPOST行動,您將獲得Level1SelectedItem屬性中第一個下拉列表的選定值(對於其他下拉菜單也是如此)
[HttpPost]
public ActionResult Index(ProductViewModel model)
{
if(ModelState.IsValid)
{
//check for model.Level1SelectedItem property value
}
//to do : reload the dropdown items
return View(model);
}