2009-04-17 10 views
1

사이드 와이드 ViewDataDictionary에 사용자 지정 속성을 추가하는 가장 유용한 방법은 무엇입니까?CustomViewData에 가장 좋은 방법은 무엇입니까?

public class CustomDataDictionary : ViewDataDictionary 
{ 
    public string Title { get; set; } 
} 

public class ApplicationController : Controller 
{ 
    public new CustomDataDictionary ViewData { get; set;} 
} 

내가 있으리라 믿고있어 :

public ActionResult Index() 
{ 
    // ViewData["Title"] = "Home"; 
    ViewData.Title = "Home"; 
    return View(); 
} 

마음에 오는 첫번째 것은이 응용 프로그램의 기본 컨트롤러에서 사용자 정의 클래스와 "새"를 사용하는 것입니다 :

의 간단한 경우를 가정 해 봅시다 또한 뷰에서 사용자 정의보기 데이터 사전을 사용하기 위해 동일한 특성을 갖는 해당 CustomViewPage를 작성해야합니다.

두 번째로 염두에 두어야 할 것은 ViewDataDictionaryExtensions 클래스를 만드는 것입니다.

셋째, "모델보기"를 사용하십시오. 뷰 모델을 사용하는 나의 쇠고기는 항상 하나를 만들고보기로 전달하는 것이 적어도 이전 두 가지 옵션에 비해 컨트롤러 코드에서 계속해서 반복되는 것처럼 보입니다.

실제 목표는 각 응용 프로그램이 해당 응용 프로그램 목적에 적합한 ViewData의 핵심 속성 집합을 가질 수 있다는 것입니다. 필자는 사전 키를 사용하지 않기를 바라고, 다른 개발자가 설정할 데이터를 알기 위해 실제 속성을 사용하는 것이 좋을 것입니다. 또한 키의 철자를 잘못 입력 할 수도 있습니다.

세 가지 방법 모두 작업을 완료합니다. 다른 사람들은 무엇을 했습니까?

답변

0

결국이 앱에서는 적어도 기본 AppViewModel 클래스를 사용했다. Controller.OnActionExecute/ed는 ViewData.Model이 설정되어 있는지 확인하고, 설정되어 있지 않으면 AppViewModel의 인스턴스가 해당 위치에 배치되므로 모든 페이지에서 일관된 Model (Model.Title, Model.IsAuthenticated, Model . 사용자 등)

그러면 더 자세한 컨트롤러 작업에는 ViewData로 설정된 AppModelView의 하위 클래스가 있습니다.액션 자체에서 수동으로 모델링하거나 속성을 통해 OnExecute/ed에서 설정하십시오. 아니 매우 많은 코드

전혀하지만 모든 컨트롤러 액션에서 예전의 생성/설정 코드를 반복에서 유지합니다. 그리고 나를 위해, 컨트롤러 API를 어수선하게하기보다는 뷰 데이터를 패키지로 유지합니다.

0

이름이 잘못 입력되어서 문제가 다시 발생합니다. 이것이 바로 상수입니다.

ViewData을 적절히 입력하려면 기타를 상속해야합니다. 그렇게 할 때까지 키를 설정하는 컨트롤러에 몇 가지 공통 코드를 쉽게 추가 할 수는없는 것인지 궁금합니다.

키를 사용하면 적어도 최소한 복잡한 대답 인 것 같습니다. 즉 가장 많은 경우 (즉, 특정 코드는 기본 IDictionary<string,object>에 대해서만 알고 있습니다)에서 작동합니다.

당신은 또한에 관심이있을 수 있습니다 this related question.

+0

는 "그것은을 위해 무엇 상수입니다." 약 50 개가 될 때까지 대단한 것 같습니다. 해시 키 이름에 대해 상수를 사용하기 시작하면 정말 빠릅니다. 확장 속성 만있는 경우 확장은 gret ...입니다. Get/Set ala SmartBag는 익숙하지 않은 코더에게 해결할 문제에 대해 많은 것을 말하지 않습니다. 컨트롤러 메서드는 괜찮을 것이지만 컨트롤러의 속성임을 암시하는 것은 사실이 아닙니다. 액션 뷰 데이터의 속성입니다. – claco

0

그들은 모두 소리가 나는 것처럼 작동합니다. 나는 당신이 선택한 것이 당신의 요구 사항/요구 사항에 달려 있다고 생각합니다. (정말 독특하고 유익한 답변, 응?)

"다른 사람들이 무엇을 했습니까?" 그래도. 따라서 폴링중인 경우 은 최근 작은 응용 프로그램에 상수 접근 방식을 사용했습니다. 아직 엔터프라이즈 MVC 앱을 작성하지는 않았지만 컨트롤러를 상속하고 추가 속성을 정의하는 기본 클래스를 만들 것이라고 추측합니다. 뷰에 일관성있게 전달하고 싶으면 내 모델에 대한 기본 클래스를 갖습니다. 그러나 이것은 현명하게 사용되어야합니다. 공식적으로 입력하더라도, 여전히 전역과 같이 많이 작동합니다. 그러니 조심해야합니다.