0

同じビューを使用する 2 つの asp.net MVC 3 Web プロジェクトがあり、それらのビューを、コントローラー、アクションフィルター、拡張メソッドなどの共通項目を含む Web プロジェクトに配置したいと考えています... (すぐ上のプロジェクト フォルダー)これら 2 つのプロジェクト)。

ビューと部分ビュー、場所を変更するこのカスタム ビュー エンジンを作成しました。

public class GenericViewEngine : RazorViewEngine
    {
        public GenericViewEngine(): this(null)
        { }
        public GenericViewEngine(IViewPageActivator viewPageActivator)
        {
            base.ViewLocationFormats = new string[] { "~/Views/{1}/{0}.cshtml", "~/../Framework.Web/Views/{1}/{0}.cshtml", "~/Views/Shared/{0}.cshtml", "~/../Framework.Web/Views/Shared/{0}.cshtml"  };
            base.MasterLocationFormats = new string[] { "~/Views/{1}/{0}.cshtml", "~/../Framework.Web/Views/{1}/{0}.cshtml", "~/Views/Shared/{0}.cshtml", "~/../Framework.Web/Views/Shared/{0}.cshtml"  };
            base.PartialViewLocationFormats = new string[] { "~/Views/{1}/{0}.cshtml", "~/../Framework.Web/Views/{1}/{0}.cshtml", "~/Views/Shared/{0}.cshtml", "~/../Framework.Web/Views/Shared/{0}.cshtml" };
            base.FileExtensions = new string[] { "cshtml" };
        }
        protected override IView CreatePartialView (ControllerContext controllerContext, string partialPath)
        {
            return base.CreatePartialView(controllerContext, partialPath);
        }
        protected override IView CreateView (ControllerContext controllerContext, string viewPath, string masterPath)
        {
            return base.CreateView(controllerContext, viewPath, masterPath);

        }
    }

私は次のような例外を受け取ります:先頭の..を使用してトップディレクトリの上で終了することはできません。

これら 2 つのプロジェクトの共通のビューを各 Web プロジェクトから除外するにはどうすればよいですか? ビューをメインの共通 Web プロジェクトにコンパイルしないようにするための解決策はありますか?

前もって感謝します。

ホセ。

4

1 に答える 1

0

ビューをメインの共通 Web プロジェクトにコンパイルしないようにするための解決策はありますか?

はい、それらをリソースとしてプラグイン アセンブリに埋め込み、複数のプロジェクトで再利用できます。このためには、現在のアプリケーションの外部の非標準の場所からビューをロードできるカスタム VirtualPathProvider を作成する必要があります。RazorGenerator プロジェクトもご覧ください。ここaccompanying blog postでは、必要な手順の一部を説明します。基本的に、MVC アプリケーションで参照できるクラス ライブラリの一部として Razor ビューをプリコンパイルするRazor Generator 拡張機能をインストールする必要があります。

于 2013-01-31T14:16:50.970 に答える