首先,尽量避免像 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 操作中,您将集合项设置为此视图模型类的实例并将其发送到您的视图。
public ActionResult Index()
{
var prodVM=new ProductViewModel();
prodVM.Level1Items=GetItemsForCategory(1);
prodVM.Leve21Items=GetItemsForCategory(2);
prodVM.Leve31Items=GetItemsForCategory(3);
return View(prodVM);
}
假设 GetItemsForCategory 方法接受类别 id 并从数据源返回 SelectListItems 列表
public List<SelectListItem> GetItemsForCategory(categoryId)
{
// to do :return the List of SelectListItem for each categoryID
}
现在在你的强类型视图中,
@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);
}