2011-12-18 20 views
4

RazorViewEngineを拡張する剃刀カスタムビューエンジンを作成しました。その後、私はVS2010 MVC3テンプレートで初期化されたデフォルトプロジェクトで通常動作する/ Viewsフォルダの_ViewStart.cshtmlで定義した変数に突然アクセスできません。剃刀カスタムビューエンジンを作成した後に_ViewStartが機能しなくなる

私の質問は、剃刀カスタムビューエンジンで_ViewStartを有効にする方法です。

+0

私はこの質問が古いことを知っています。一般的に言えば、コードを見たり、Razorビューエンジンを拡張したときに何が上書きされたかを知ることは役に立ちます。 –

答えて

0

あなたのコードを見ることなく、私は特に間違って起こっていると言うが、私はあなたがやっていないどのようなアイデアを持っているかもしれないと思うRazorViewEngineためthe source見た後にすることはできません。あなたは、彼らがRazorViewコンストラクタの引数runViewStartPagesためにtrueの値を渡している見ることができます

protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath) 
    { 
     var view = new RazorView(controllerContext, viewPath, 
           layoutPath: masterPath, runViewStartPages: true, viewStartFileExtensions: FileExtensions, viewPageActivator: ViewPageActivator) 
     { 
      DisplayModeProvider = DisplayModeProvider 
     }; 
     return view; 
    } 

これは次のようにCreateView方法が見えるものです。 RazorViewクラスのRenderViewメソッドのthe sourceを見ると、_ViewStartファイルを検索し、それを実行階層にコンパイルする役割を果たすStartPageLookupDelegateを作成するためにこのブール値パラメータが使用されています。

WebPageRenderingBase startPage = null; 
if (RunViewStartPages) 
{ 
    startPage = StartPageLookup(webViewPage, RazorViewEngine.ViewStartFileName, ViewStartFileExtensions); 
} 
webViewPage.ExecutePageHierarchy(new WebPageContext(context: viewContext.HttpContext, page: null, model: null), writer, startPage); 

だから、これはあなたがおそらく2つのうちのいずれかをやっている意味:

  1. RazorViewEngineCreateViewメソッドをオーバーライドして、上記のようにしRazorViewを初期化しません。
  2. StartPageLookupDelegateを作成することなくRazorViewRenderViewメソッドをオーバーライドし、メソッドに渡します。

これは、解決策を見つけるための正しい経路を教えてくれることを願っています。

関連する問題