5

2つの異なるViewフォルダーが必要なMVCプロジェクトがあります。1つはに~/Views/あり、もう1つはにあり~/Framework/Views/ます。これは、次のようなレイザービューエンジンに基づいてカスタムビューエンジンを作成することによって行われます。

public class MyViewEngine : RazorViewEngine
{
    private static string[] AdditionalViewLocations = new[]{
        "~/Framework/Views/{1}/{0}.cshtml",
        "~/Framework/Views/{1}/{0}.vbhtml",
        "~/Framework/Views/Shared/{0}.cshtml",
        "~/Framework/Views/Shared/{0}.vbhtml"
    };

    public MyViewEngine()            
    {
        base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(AdditionalViewLocations).ToArray();
        base.ViewLocationFormats = base.ViewLocationFormats.Union(AdditionalViewLocations).ToArray();
        base.MasterLocationFormats = base.MasterLocationFormats.Union(AdditionalViewLocations).ToArray();
    }
}

問題は、2つのViewsフォルダーのそれぞれで異なる_ViewStart.cshtmlファイルを使用したいということです(つまり~/Views/_ViewStart.cshtml、フォルダーで見つかったビュー~/Views/とフォルダーで見つかったビューに対して)が、ViewEngineは最初に見つけたファイルを使用しますの元のファイルです。~/Framework/Views/_ViewStart.cshtml~/Framework/Views/~/Views/

これは可能ですか?

ありがとうございました

4

2 に答える 2

7

これは間違いなく可能です、私はあなたが何かを逃したと思います。

私はあなたが提供したビューエンジンを使用してこれを自分でテストしました(逐語的にコピーして貼り付けました)。私はあなたと同じ行動を見ていません。に1つ、 。に1つ、合計2つの_ViewStart.cshtmlファイルがあります。~/Framework/Views/_ViewStart.cshtml~/Views/_ViewStart.cshtml

内でビューを実行すると、Frameworkフォルダー内のが~/Framework/Views/使用されます。_ViewStart.cshtml内でビューを実行すると、Viewsフォルダー内のが~/Views/使用されます。_ViewStart.cshtml

RazorViewEngineDotPeekを使用してコードを再確認すると、これが正確に動作する必要があることも確認されます。ビューエンジンは、レンダリングされているビューと同じフォルダ内にある名前のファイルのチェックインを開始し_ViewStart.cshtml、アプリケーションのルートに到達するまでディレクトリツリーを上に移動します。

于 2013-03-09T01:49:25.503 に答える
3

の選択_ViewStartは階層的ですが、に~/Framework/Views並列に追加しました~/Views。Razorが実際にあなたが望むことをするように設定されているとは思いません(つまり、2つの完全に平行なビューの場所)。Frameworkただし、メインViewsフォルダに入れると、 _ViewStartsは正しくロードされます。

于 2013-03-07T22:29:36.793 に答える