2010-03-01 2 views
2

여러 가지 속성, SelectList 및 자식 개체의 배열을 포함하는 viewmodel이 있습니다.ASP.NET MVC 편집 페이지에서 여러 개의 드롭 다운을 바인딩하는 방법은 무엇입니까?

public class RoundViewModel 
{ 
    public int RoundId { get; set; } 
    public string RoundName { get; set; } 
    public SelectList Teams { get; private set; } 
    public List<GameViewModel> Games { get; set; } 
} 

public class GameViewModel 
{ 
    public int HomeTeamId { get; set; } 
    public int AwayTeamId { get; set; } 
    public DateTime GameTimeGMT { get; set; } 
} 

이 라운드마다 게임의 변수 숫자가 될 수 있고, 내가 페이지에 넣어 각 드롭 다운에 동일한 Teams selectList의 결합하기 위해 노력하고있어 :

<% using (Html.BeginForm()) {%> 

    <fieldset> 
     <legend>Fields</legend> 
     <%= Html.HiddenFor(model => model.CodeId) %> 
     <div class="editor-label"> 
      <%= Html.LabelFor(model => model.RoundNumber) %> 
     </div> 
     <div class="editor-field"> 
      <%= Html.TextBoxFor(model => model.RoundNumber) %> 
      <%= Html.ValidationMessageFor(model => model.RoundNumber) %> 
     </div> 

     <div class="editor-label"> 
      <%= Html.LabelFor(model => model.RoundName) %> 
     </div> 
     <div class="editor-field"> 
      <%= Html.TextBoxFor(model => model.RoundName) %> 
      <%= Html.ValidationMessageFor(model => model.RoundName) %> 
     </div> 

     <%  
     for (int i = 0; i < Model.Games.Count; i++) 
     { 
     %> 
     <div class="editor-label"> 
      Game: 
     </div> 
     <div class="editor-field"> 
     <%= Html.DropDownList("Games[" + i + "].HomeTeamId", Model.Teams, "--No Game--", new { value = Model.Games[i].HomeTeamId })%> VS 
     <%= Html.DropDownList("Games[" + i + "].AwayTeamId", Model.Teams, "--No Game--", new { value = Model.Games[i].AwayTeamId })%> 

      <%= Html.TextBox("Games[" + i + "].GameTimeGMT", Model.Games[i].GameTimeGMT, new { Class = "calendar", value = Model.Games[i].GameTimeGMT })%> 
     </div> 
     <% } %> 

     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 

<% } %> 

유사한보기가 잘 작동 만들기 작업을하지만 각 드롭 다운 목록에서 기존 선택을 설정할 수 없습니다. 내가 각 게임에 대한 datetime을 명시 적으로 설정하고 있음을 알 수 있습니다.

new { value = Model.Games[i].HomeTeamId } 행은 <select> html 요소에 속성을 설정하지만 분명히 작동하지 않습니다. 다른 속성을 설정하고 jQuery를 사용하여 선택한 항목을 설정하는 방법에 대해 생각했지만 기존 코드보다 더 해킹 된 느낌이 들었습니다.

나는 MVC에 상당히 익숙하다. 그래서 나는이 모든 잘못 된 방법을 확실히 이해할 수있다. 아무도 도와 줄 수 있습니까?

답변

2

SelectList 개체의 생성자를 살펴보면 IEnumerable 개체 목록을 원본으로 사용하고 다른 매개 변수를 사용하여 데이터 및 텍스트 필드와 선택한 항목을 설정하는 것을 확인할 수 있습니다.

팀의 목록을 말하기보다는 View 모델에 SelectList가 저장되는 특별한 이유가 있습니까? 그럼 당신은 할 수있을거야

Html.DropDownList("Games[" + i + "].HomeTeamId", 
    new SelectList(Model.Teams, Model.Games[i].HomeTeamId)); 

public class RoundViewModel 
{ 
    .... 
    public IList<TeamObject> Teams { get; private set; } 
+0

굉장, 그건 그랬어. 솔직히 SelectList를 사용하는 이유는 그것이 내가 사용했던 간단한 예제의 대부분을 사용했기 때문입니다. – Damovisa

관련 문제