2009-08-10 4 views
45

ASP.NET MVC에서 선택 목록을 여러 개 설정 한 경우 모델 바인딩은 어떻게 작동합니까?다중 선택 목록은 ASP.NET MVC에서 모델 바인딩과 어떻게 작동합니까?

선택한 항목, 배열에 대한 반환 값은 무엇입니까?

<SELECT NAME="toppings" MULTIPLE SIZE=5> 
    <option value="mushrooms">mushrooms</option> 
    <option value="greenpeppers">green peppers</option> 
    <option value="onions">onions</option> 
    <option value="tomatoes">tomatoes</option> 
    <option value="olives">olives</option> 
</SELECT> 

답변

25

예, 기본적으로 다중 선택 목록은 선택한 값의 배열을 통해 게시됩니다.

This article에는 다중 선택 목록과 함께 강력한 형식의보기를 사용하는 방법을 비롯한 자세한 정보가 있습니다.

    귀하의 모델이나 뷰 모델 클래스가 선택한 옵션 항목의 ID를위한 컬렉션 속성을 필요로
  • , 예를 들어 : 링크 된 "기사"에서

    List<int> ToppingIds.

  • 다중 선택 목록 POST를 포함하는 양식이있는 컨트롤러 작업 메서드에서 모델 또는 뷰 모델 클래스에 추가 한 컬렉션 속성을 통해 선택한 옵션 항목에 액세스 할 수 있습니다. VegTableViewmodel에서
7

: 컨트롤러에서

public IEnumerable<MultiSelectList> Vegetables { get; set; } 

: VegTableViewModel의 야채 속성에 통과 한 후 야채리스트를 취득합니다. 보기에서

viewmodel.Vegetables = vegetables .Select(d => new MultiSelectList(d.VegName)); 

:

@Html.ListBoxFor(m => m.L, new MultiSelectList(Model.Vegetables.Select(d => d.Items)) 
19

예, 그것은 배열을 반환합니다.

보기 모델 :

public class MyViewModel 
{ 
    public int[] SelectedIds { get; set; } 
    public IEnumerable<SelectListItem> Items { get; set; } 
} 

컨트롤러 :

public ActionResult Index() 
{ 
    var model = new MyViewModel 
    { 
     // fetch the items from some data source 
     Items = Enumerable.Select(x => new SelectListItem 
     { 
      Value = x.Id, 
      Text = "item " + x.Id 
     }) 
    }; 
    return View(model); 
} 

보기 :

@model MyViewModel 
@Html.ListBoxFor(x => x.SelectedIds, Model.Items) 
관련 문제