2010-05-21 8 views
4

사용자가 입력해야하는 작은 양식이 있으며 다음 필드로 구성됩니다.Asp.Net MVC 핸들 드롭 다운 모델의 일부가 아닌 상자

이름 (텍스트) 값 그룹 (텍스트) -

지금이보기에 대한 모델과 같이 보이는 (그룹 데이터베이스 테이블에서 가져온 옵션의 목록입니다),

public string Name { get; set; } 
public string Value { get; set; } 
public int GroupID { get; set; } 

이제 뷰는 위의 모델에 강력하게 입력됩니다.

드롭 다운 목록을 채우는 데 어떤 방법을 사용합니까? 데이터가 모델 내에 포함되어 있지 않기 때문에 (모델에 포함될 수 있음) Temp/View 데이터를 사용해야합니까? HTML 도우미? 이것을 달성하기위한 이상적인 방법은 무엇입니까?

답변

2

참고 : 여기서는 MVC2를 사용한다고 가정합니다.

강하게 입력 된 드롭 다운 (이 경우 국가 목록)이 필요한 경우 ViewModel에서 2 개의 속성을 사용합니다.

public IEnumerable<SelectListItem> Countries { get; set; } 
    public int CountryID { get; set; } 

나는이 유사한 코드를 사용하여 내 행동에 IEnumerable<SelectListItem>에 내 목록의 미리 변환을 수행. (이것은 이름과 고유 ID를 가진 국가 클래스를 가정합니다).

 viewModel.Countries = Repository.ListAll().Select(c => new SelectListItem { Text = c.Name, Value = c.ID }); 

그런 다음 내 강력한 형식의보기에, 내가 사용

<%= Html.DropDownListFor(model => model.CountryID, Model.Countries) %> 

다시 (다시 같은 뷰 모델을 수신) 강력한 형식의 조치를 게시 할 때 때문, 대단한는 CountryID이 될 것입니다 선택된 국가의 ID

다른 이점은 유효성 검사에 문제가있는 경우입니다. .Countries 목록을 다시 채우고 뷰 모델을 다시보기로 전달하면 올바른 값이 자동으로 선택됩니다.

+0

pitts - 다음 오류로 인해 실패합니다. " 'OptionGroupID'키가있는 ViewData 항목은 'System.Int32'유형이지만 'IEnumerable '유형이어야합니다." 다음 구문을 사용하여 <% = Html.DropDownListFor (model => model.OptionGroupID, Model.OptionGroups) %> – LiamB

+0

@Pino, 정말 이상합니다. 내일 직장에서 코드를 확인하고 다시 연락하겠습니다. –

+0

pitts Thanks :) – LiamB

1

나는 다음과 같은 접근 방식을 좋아한다 :

public DropdownLogic Groups { get; set; } 

을 그리고 당신의보기 :

class DropdownLogic { 
    public DropdownLogic(MyModel model) { /* blah */ } 

    public ListOfDropdownItems ToDropdown() { 
     /* do something with model and transform the items into items for the dropdownlist */ 
     // f.e. set the item that matches model.GroupId already as selected 
    } 
} 

이 모델에 추가, (의사) 같은 것을 당신을 위해이 일을하는 도우미 클래스가 :

<%=Html.Dropdown(Model.Groups.ToDropdown())%> 
3

나는 모든 것을 포함하고있는 사전 (나는 MVC contrib의 선택 상자가 마음에 든다.)을 사용하여 이것에 viewmodel을 사용한다. 같은 속성 일 :

class LeViewModel { 
    public string Name { get; set; } 
    public string Value { get; set; } 
    public int GroupID { get; set; } 
    public Dictionary<string, string> Groups {get; set;} 
} 

그런 다음보기에 당신이
<%: Html.Select(m => m.GroupId).Options(Model.Groups) %> 

는 희망이 도움이해야 할 유일한 것이다.

+0

어떻게 할당 하시겠습니까? –

관련 문제