2012-06-03 1 views
1

내 MVC3 면도기 응용 프로그램 (ASP.NET) 및 사용자 정의 도우미에 액세스하려는 ViewStart 코드에서 일부 사용자 지정 도우미를 정의했습니다.ViewStart에서 (사용자 정의) 웹 도우미에 액세스하는 방법은 무엇입니까?

_ViewStart에서 액세스 할 수없는 것으로 나타났습니다. ViewStart는 WebViewPage가 아니라 ViewStartPage에서 파생되므로 이해할 수 있습니다.

그래서 사용자 지정 ViewStart 클래스에서 도우미를 정의하려고했지만 헬기를 초기화 할 수 있으려면 ViewDataContainer에 액세스해야합니다.

ViewStart (또는 사용자 정의 ViewStartPage)에서 내 사용자 정의 도우미에 액세스하려면 어떻게해야하고 그렇지 않은 경우 NULL을 사용하여 viewDataContainer 생성자 속성을 초기화 할 수 있습니까? 내 사용자 지정 ViewStartPage에서 모든 ViewData 액세스가 필요하지 않을 것으로 예상됩니다.

는 또한 사용자 정의 ViewStart 클래스를 구현하려하지만 그것은 나에게 오류를 제공합니다

CustomViewStart does not implement inherited abstract member 'System.Web.WebPages.WebPageExecutingBase.Execute()' 

내가 그 실행 방법에 무엇을해야합니까? 나는 customViewStart에서 멋진 것을하고 싶지 않습니다. 그냥 내 도우미에 액세스하십시오.

답변

0

내가 이해 한대로 _ViewStart 파일은 일반보기가 아닙니다. 다른보기의 경우 레이아웃보기와 같은 기본값을 설정하는 데만 사용할 수 있습니다. 예를 들어

이 내 _ViewStart 파일의 전체 내용입니다 : 파일의 사용자 지정 도우미에 대한 필요가 없을 것입니다

@{ Layout = "~/Views/Shared/Layouts/Wide.cshtml"; } 

이 사실이 보유하고있는 경우, 당신은 가능성이 문제를 해결하기 위해 노력하고 너는 처음부터 가지고 있으면 안된다.

Web.config에서 어셈블리와 네임 스페이스를 추가하여 특정보기에서 가져 오기하지 않아도됩니다. 내 모델, 열거 형 및 확장 메서드를 가져 오는 데이 메서드를 사용합니다.

+0

나는 이해하지만 도우미는 몇 가지 요소에 액세스해야하며 특히 일부 레이아웃 특성을 정의해야합니다. 그래서 나는 기본 HTML 도우미가 아닌 "사용자 지정"웹 도우미를 언급했다. –

+0

내가 아는 바로 그 이유는 그것이 (HTML 도우미가 아닌) 커스텀 웹 도우미라고 말했다. 내 도우미는 내 View Start에서 액세스해야하는 항목을 수행합니다. http://stackoverflow.com/questions/10872649/a-viewstartpage-can-be-used-only-with-with-page-that-derives-from-webviewpage –

+1

을 참조하십시오. 왜 어떤 클래스에서 정적 메소드를 사용하여 레이아웃을 설정하지 않는지,'@ {Layout = ThemeHelper.GetLayout(); }'? (자신의 상속 된 ViewStart를 생성하고 그에 대한 확장 기능을 만드는 것과는 대조적으로) –

1

내가 의심하는 것처럼 모든 것이 가능합니다. 먼저 몇 가지 핵심적인 기술 세부 정보가 먼저 정렬되어야합니다.

public abstract class CustomViewStartPage : System.Web.Mvc.ViewStartPage { 
    public Helpers.InvariantHelper ConfigHelper { get; private set; } 

    public CustomViewStartPage() : base() { 
     ConfigHelper = new Helpers.InvariantHelper(); 
    } 
} 

이제 WebViewPage 사용자 지정 기본 페이지에서 여러 가지 사용자 지정 도우미를 정의했으며보기를 위해 작업을 수행했습니다. 그러나 ViewStart에서 ViewContext에 액세스하지 않아도되는 특정 항목 (여기서는 단지 예일뿐입니다)을 수행해야했습니다 (원래 생각했던 것처럼). @MortenMertner 외부의 문제에서 (새로운보기를 표시된대로

@* Views/_ViewStart.cshtml *@ 
@inherits MyNamespace.Web.Mvc.CustomViewStartPage 
@{ 
    var something = ConfigHelper.DisableParentLayout; 
} 

물론, 하나는 클래스의 정적 멤버를 사용할 수 있습니다

그래서,이와 나는 지금 내 _ViewStart.cshtml이있을 수 있습니다) 그러나 어떤 경우에는 당신이 진정으로 원하는 것이 아닐 수도 있습니다. 이 예는 무의미한 것이지만 필요한 사람들을 위해 어떻게 성취 될 수 있는지를 나타내는 목적으로 사용됩니다.

반면에 ViewContext에 액세스해야하는 경우 (다른 유효한 시나리오)이 사용자 정의보기 시작 페이지를 수정하여 오류없이 컨텍스트에 액세스하는 방법을 설명하는 위의 내 코멘트에서 게시물을 볼 수 있습니다.

관련 문제