첫째, 에 시도 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 작업에
, 당신은이 뷰 모델 클래스의 인스턴스에 컬렉션 항목을 설정하고보기에 그 보내드립니다. GetItemsForCategory 방법을 가정
는
public ActionResult Index()
{
var prodVM=new ProductViewModel();
prodVM.Level1Items=GetItemsForCategory(1);
prodVM.Leve21Items=GetItemsForCategory(2);
prodVM.Leve31Items=GetItemsForCategory(3);
return View(prodVM);
}
@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의 행동에, 카테고리 ID를 받아 데이터 소스 당신의 강력한 형식의보기에 지금
public List<SelectListItem> GetItemsForCategory(categoryId)
{
// to do :return the List of SelectListItem for each categoryID
}
에서 SelectListItems의 목록을 반환 , 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);
}