4

_ViewStart.cshtml が MVC 3 のカスタム ViewEngine で取得されない理由があるかどうかは誰にもわかりませんか?

マイ ビューは次の場所に保存されます

〜\UI\ビュー\

~\UI\ビュー\共有\

ViewStart は ~\UI\Views_ViewStart.cshtml にあります。

既存の RazorViewEngine をクリアし、global.asax でそれを置き換えました。各ビューで個別に指定しない限り、レイアウト ページが適用されないことを除いて、すべてのビューが適切に解決されます。

私のエンジンパス形式のコードは次のとおりです。

        this.ViewLocationFormats = new[]
                                       {
                                           "~/UI/Views/{1}/{0}.cshtml", 
                                           "~/UI/Views/Shared/{0}.cshtml"
                                       };

        this.PartialViewLocationFormats = new[]
                                              {
                                                  "~/UI/Views/Shared/{0}.cshtml", 
                                                  "~/UI/Views/Shared/Partial/{0}.cshtml", 
                                                  "~/UI/Views/{1}/Partial/{0}.cshtml"
                                              };

        this.AreaMasterLocationFormats = new[] 
                                            { 
                                                "~/UI/Views/Admin/Shared/{0}.cshtml" 
                                            };

        this.AreaPartialViewLocationFormats = new[]
                                                  {
                                                      "~/UI/Views/Admin/Shared/{0}.cshtml", 
                                                      "~/UI/Views/Admin/Shared/Partial/{0}.cshtml"
                                                  };

        this.AreaViewLocationFormats = new[] { "~/UI/Views/Admin/{1}/{0}.cshtml" };

    this.MasterLocationFormats = new[]
    {
         "~/UI/Views/{1}/{0}.cshtml",
         "~/UI/Views/Shared/{0}.cshtml"
    };

前もって感謝します、スコット

4

1 に答える 1

2

残念ながら、今回は愚かさが勝ちました。カスタム ViewEngine は、記事から参照したコードに基づいていました。記事内で、CreateView のオーバーライドについて詳しく説明しています。ブール値パラメーター (runViewStartPages) の 1 つが false に設定されていましたが、名前付き引数ではなかったため、見落としていました。

public class XyzViewEngine : RazorViewEngine
{    
    protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
    {
        return new RazorView(
            controllerContext,
            viewPath,
            masterPath,
            true, //<--- this drives whether to use _ViewStart pages.  It was set to false
            FileExtensions,
            ViewPageActivator
        );
    }
}
于 2013-02-19T22:48:49.193 に答える