2011-09-18 3 views
3

저장을 클릭하면 다음 오류가 발생합니다.asp.net mvc 3 Dropdownlist 문제, 'IEnumerable <SelectListItem>'유형이어야합니까?

'SelectedCategoryId'키가있는 ViewData 항목의 형식은 'System.Int32'이지만 'IEnumerable'유형이어야합니다.

내 컨트롤러 :

public ActionResult IndexTwee() 
    { 

     var listCategories = new List<SelectListItem>(); 

     listCategories.Add(new SelectListItem() {Text="foo",Value="1" }); 
     listCategories.Add(new SelectListItem() { Text = "bar", Value = "2" }); 

     MyViewModelTwee model = new MyViewModelTwee() { }; 

     model.Categories = listCategories; 
     model.SelectedCategoryId = 2; 

     return View(model); 
    } 


    [HttpPost] 
    public ActionResult IndexTwee(MyViewModelTwee Model) 
    { 

     return View(Model); 

    } 

내 모델 :

public class MyViewModelTwee 
{ 
    public int SelectedCategoryId { get; set; } 
    public IEnumerable<SelectListItem> Categories { get; set; } 
} 

내보기 :

@model mvc3DropDown.Models.MyViewModelTwee 
@using (Html.BeginForm()) 
{ 
    @Html.DropDownListFor(
    x => x.SelectedCategoryId, 
    Model.Categories 
) 
    <button>Save</button> 

} 

답변

2

하여 POST 액션의 목록을 바인딩하는 것을 잊지 마세요 :

[HttpPost] 
public ActionResult Index(MyViewModelTwee Model) 
{ 
    var listCategories = new List<SelectListItem>(); 
    listCategories.Add(new SelectListItem() { Text = "foo", Value = "1" }); 
    listCategories.Add(new SelectListItem() { Text = "bar", Value = "2" }); 
    Model.Categories = listCategories; 
    return View(Model); 
} 

html <form>을 제출할 때 선택한 값만 전송된다는 점에 유의하십시오. 다른 값은 손실되므로 GET 작업에서 가져온 값을 가져온 위치에서 값을 다시 가져와야합니다. 물론이 코드를 리포지토리 계층으로 구체화하여 이제 코드가 다음과 같이 보이게 할 수 있습니다.

public ActionResult IndexTwee() 
{ 
    var model = new MyViewModelTwee 
    { 
     SelectedCategoryId = 2, 
     Categories = _repository.GetCategories() 
    }; 
    return View(model); 
} 

[HttpPost] 
public ActionResult IndexTwee(MyViewModelTwee Model) 
{ 
    Model.Categories = _repository.GetCategories(); 
    return View(Model); 
}