2011-09-20 4 views
2

MVC3에서 특정 개체에 대한 선택 항목을 채우기 위해 꽤 많은 페이지에 드롭 다운 목록이있는 응용 프로그램을 개발 중입니다. 제 질문은 내 ViewModel의 드롭 다운 목록에 대한 컬렉션을 포함 시키거나 드롭 다운을 채울 서비스를 호출하는 것이 더 합리적입니까?MVC3 ViewModel의 컬렉션 또는 Ajax 서비스로 채우기

public class MyViewModel 
{ 
    public int SelectedFooId { get; set; } 
    public IEnumerable<Foo> Foos { get; set; } 
} 

@Html.DropDownListFor(model => model.SelectedFooId, new SelectList(Model.Foos, "Id", "Name", "-- Select Foo --")) 

또는 뷰 모델에서 Foos 모음을 제거하고 JSON 또는 무언가를 통해 아약스와 함께 채워이를 구현하기 위해 더 나은 방법이있다 :

예를 들어, 더 이해하는 일은 이것을 가지고 ? 제가 서비스를 부르면, 이것이 어떻게 행해지는지 보여줄 수 있습니까? 나는 MVC에 비해 상대적으로 새로운 것으로, 나쁜 습관에 빠지기를 원하지 않기 때문에 모범 사례로 모든 것을하려고 노력하고있다.

답변

4

ASP.NET MVC 응용 프로그램에서 드롭 다운 목록을 렌더링하는 아주 좋은 방법입니다. 두 개의 속성, 즉 선택한 값을 바인딩하는 스칼라 속성과 옵션을 바인딩 할 컬렉션을 포함하는 뷰 모델을 정의합니다. 그런 다음 컨트롤러 액션을 사용하여이 뷰 모델을 채우고 뷰에 전달하고 뷰 내부에서 DropDownListFor 도우미를 사용합니다.

일부 동적 바인딩을 수행 할 때 AJAX를 사용하여 드롭 다운 값을 채우는 것이 유용 할 수 있습니다. 예를 들어 계단식 드롭 다운 목록에서 첫 번째 ddl을 선택하면 두 번째 ddl의 값이 조절됩니다. 이것이 구현 될 수있는 방법은 example입니다.

+0

감사합니다. 몇 가지 속성을 설정하기 위해 여러 개의 드롭 다운이있는 경우 어떻게됩니까? 여전히 좋은 구현입니까? 아니면 모델이 복잡해지기 시작합니까? – shuniar

+0

@shuniar, 아직 아주 좋은 구현. 뷰 모델 클래스의 역할은 주어진 뷰의 요구 사항을 반영하는 것임을 기억하십시오. 따라서 뷰에 5 개의 ddls를 표시해야하는 경우 뷰 모델에서 5 개의 스칼라 속성을 사용하여 선택한 값을 바인딩하고 5 개의 컬렉션을 옵션에 바인딩합니다. –

+0

설명해 주셔서 감사합니다. 이 구현을 계속할 것입니다. – shuniar

관련 문제