2009-08-05 3 views
1

ViewData의 경우 문자열을 키로 사용하지 않고 enum을 사용하고 있습니다. 현재 현재 어디서나 액세스 할 수있는 큰 목록 하나가 있습니다. 일부 enum은 여러 Controller/View 쌍에서 사용됩니다. 이 열거 형을 단순히 성장 목록으로 분류하는 것이 아니라 더 나은 방법으로 분류 할 수 있습니까?ASP.NET MVC : enums 및 ViewData [] 키

ViewData에 일반적으로 사용되는 하드 코딩 된 문자열이 마음에 들지 않습니다. 열거 형은 큰 인텔리 센스를줍니다. 열거자를 컨트롤러로 분류하는 방법에 대해 생각했습니다. 특정 열거 형 값이 컨트롤러간에 공유되고 중앙 집중식 위치가 필요하기 때문에 그렇게 잘 작동하지 않습니다.

답변

4

ViewData 사전 대신 강력하게 형식화 된 ViewModels을 사용 해본 적이 있습니까?

당신이 MyViewModel라는 클래스가있는 경우, 당신은 당신의 컨트롤러 클래스에서이 작업을 수행 할 수 있습니다

public ViewResult Index() 
{ 
    return this.View(new MyViewModel()); 
} 

MyViewModel는 모든 클래스가 될 수 있습니다 - 그것은 어떤 특정 인터페이스 또는 아무것도를 구현할 필요는 없습니다. 그런 다음보기에서 필요한 모든 속성을 해당 클래스에 추가 할 수 있습니다.

ViewModel을 기반으로보기를 강력한 형식의보기로 정의 할 수 있습니다. 이와

Inherits="System.Web.Mvc.ViewPage" 

: 당신의에서 .aspx 파일에서이를 교체해야

Inherits="System.Web.Mvc.ViewPage<MyViewModel>" 

이 지금 강력하게보기에서 뷰 모델에 (인텔리 포함) 액세스를 입력 한 것을 의미합니다 :

this.ViewData.Model.MyProperty 

여기에 설명 된 대안이 훨씬 강력하므로 ViewData 사전을 사용하지 않습니다.

+0

내 컨트롤러가 특정 값을 얻기 위해 2 개 이상의 모델 클래스에 액세스하는 경우에는 작동하지 않습니다. 보기는 하나의 클래스로만 입력 할 수 있습니다. ViewData를 사용하면 여러 클래스에서 여러 값을 가져 와서 값을 표시하는 것 외에는 아무것도하지 않는보기로 보낼 수 있습니다. – 4thSpace

+3

ViewModel은보기를 지원해야하므로 필요한 모든 속성을 가질 수 있으며 원하는만큼 복잡 할 수 있습니다. 데이터의 출처가 부적절한 곳은 컨트롤러의 책임입니다. 각 ViewModel은 특정 뷰에 맞게 조정할 수 있으므로 필요한 데이터를 정확히 제공 할 수 있습니다. 뷰에 복잡한 데이터를 보내려는 경우 이러한 복잡한 클래스가 개별 속성으로 포함 된 새 ViewModel을 만듭니다. 실제로 ViewData 사전을 사용할 필요가 없습니다. –