2010-07-13 4 views
12

데이터베이스에서 동적으로 생성 된 확인란 목록을 포함하는보기를 만든 다음 양식을 다시 게시 할 때 선택한 목록을 검색하려고합니다.체크 박스와 모델 바인딩의 동적 목록

public class ItemIWouldLikeACheckboxFor { 
    public int Id { get; set; } 
    public string Description { get; set; } 
} 

나는 이들의 목록이 포함 된 뷰 모델이 있습니다 :

public class PageViewModel { 
    // various other properties 
    public List<ItemIWouldLikeACheckboxFor> checkboxList { get; set; } 
} 

내 컨트롤러 get 메소드 :

내 EF 모델은 클래스가 포함되어

public ActionResult Create() { 
    var viewModel = new PageViewModel(); 
    viewModel.checkboxList = db.ItemIWouldLikeACheckboxFors.ToList(); 
    return View(viewModel); 
} 

내 보기 :

<% using (Html.BeginForm()) { %> 
    <%-- other stuff here... %> 

    <% foreach (var item in checkboxList) { %> 
     <%: Html.CheckBox(<!-- what exactly ?????? -->) %> 
    <% } %> 

    <%-- other stuff here...%> 
    <input type="submit" /> 
<% } %> 

내 컨트롤러 포스트 방법 : 나는 그것을 작동시킬 수없는 것

[HttpPost] 
public ActionResult Create(PageViewModel viewModel) { 
    // do stuff with other fields 

    // I would like to do something like: 
    foreach (var item in selectedCheckBoxes) { 
     // do stuff 
    } 
} 

. 내 기본 질문은 코드 스 니펫의 주석으로 혼합되어 있지만 다음을 요약하면됩니다.

  • 내 뷰 모델은 정상입니까? (표시 할 목록과 달리 선택된 것을 캡처하려면 아무 것도 추가해야합니까?)
  • 각 확인란을 표시하기 위해 정확히 무엇을 넣어야합니까?
  • 게시자가 게시 한 후 컨트롤러에서 선택한 확인란에 어떻게 액세스합니까?

답변

14

본 사람 : http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx? 당신이 필 따르는 경우

<%= Html.DropDownFor(m=>m.products) %> 

: 우리의 영문 페이지의 모습 있도록

우리는 기본적으로

<label for="Products"> Select Products </label> 
<ul class="checkBoxList"> 
<li> 
    <input type="hidden" value="0" name="Products.Index"> 
    <input type="checkbox" value="3424" name="Products[0].Id" id="Products0"> 
    <label for="Products0">iPod touch 3rd Generation</label> 
</li> 
<li> 
    <input type="hidden" value="1" name="Products.Index"> 
    <input type="checkbox" value="3123" name="Products[1].Id" id="Products1"> 
    <label for="Products1">Creative Zen</label> 
</li> 
</ul> 
</div> 

모델이 좋아 보이는 것처럼 HTML을 렌더링하기 위해 우리 자신의 컨트롤을 작성, 우리는 사용자 지정 도우미를 썼다 귀하의 모델이 귀하의 컨트롤러에 자동으로 바인딩됩니다. 또한

+0

감사합니다. 그 정보의 조합이 나를 넘어서게했습니다. 다음 단계 (시간이 더 많이 걸릴 때)와 같은 도우미에 넥타이를 매는 것입니다. – Jon

+0

커스텀 헬퍼에 대한 많은 리소스가 있으므로 잘될 것입니다! 즐겨! –

관련 문제