2010-07-26 6 views
0

난 강력하게 다음의 정신을 ViewData를 입력 한 site.master
DRY로 유지하려면 다른 BaseView에서 상속받은 BaseViewData 클래스로 DRY를 높이십시오.강력한 형식의 사용자 정의 baseviewdata 내 프로젝트에서

이제 모든 컨트롤러가 이러한 속성을 채워야합니다. 다시 말하지만, DRY를 유지하기 위해이 작업을 수행하는 컨트롤러 용 BaseController를 만들었습니다. 그것은 Controller.ViewData 모든 컨트롤러는 newing 최대 생성자시을 ViewData을의 책임을 숨 깁니다 때문에

BaseController : Controller 
    + new ViewData : BaseViewData 
    + FetchThemes 
    + FetchSelectedTheme 

BaseController.ViewData는 newed된다.

필자는 기존의 뷰 데이터 시스템을 숨기고 내 시스템으로 대체하고 있습니다.
이것은 내가 뭔가 잘못하고 있다고 생각하는 곳입니다. 이 작품을보다 세련되게 만드는 방법에 대한 제안이 있으십니까?

+0

그것은 나에게 보인다 볼 수 있습니다 강력한 형식의 뷰. 나는 그 점을 보지 못한다. 당신이 신경 쓰면 강하게 타자를 치는 모형이 이미있을 수있다. –

+0

그러나 강하게 입력 된 기존보기를 기본보기의 개념으로 어떻게 사용합니까? –

+0

필요하다면 일반적인 뷰 데이터를 삽입하기 위해 결과를 실행하기 전에 액션 필터 /와 같은 것을 사용할 수 있습니다. –

답변

3

이러한 항목이 항상 마스터 페이지에있는 경우 데이터를 사용하는 컨트롤을 추출하고 컨트롤러에서 각각을 처리하도록하는 것이 좋습니다. 그런 다음 마스터 페이지에서 Html.RenderAction을 사용하고 데이터로 사용자 정의 컨트롤을 출력하십시오. 당신의 컨트롤러이 방법 없음 테마 뷰에 대한 정보와 함께 복잡 얻을, 데이터가

예 출처 코드를 읽는 사람이 쉽게-발명 다시 것 같은

public class ThemeController : Controller{ 
    public ActionResult ThemeDropDown(){ 
    return PartialView(new ThemeViewModel(){ SelectedTheme = ..., ThemeList = ... }) 
    } 
} 


public class AppleController : Controller{ 
    public ActionResult AppleStuff(){ 
    return PartialView(new AppleViewModel(){ Apple = ..., AppleList = ... }) 
    } 
} 


<%= Html.RenderAction("ThemeDropDown", "Theme") %>  
<%= Html.RenderAction("AppleStuff", "Apple") %> 
+0

이것은 실제로 내 시스템에 좋은 대안이 될 수 있습니다. 내가 진짜 애플 리케이션에서 이것을 할 수 있는지 보자 :) –

관련 문제