簡単なプラグイン アーキテクチャを作成するための最良の方法と思われるため、ASP.NET MVC 3 および razor ビューでポータブル ビューを使用しようとしています。そのため、クラス ライブラリのセットアップがあり、ビューが /Views/Admin/Index.cshtml にあり、埋め込みリソースとして設定されています。次に、そのプロジェクトをメインの Web アプリケーション プロジェクトの依存関係として含めます。管理コントローラ、インデックス アクションにアクセスしようとすると、そのビュー ファイルが見つからないというメッセージが表示されます (そのため、コントローラは適切に含まれています)。ポータブル領域のバイナリではなく、メインの Web アプリケーション プロジェクトを調べようとしていると思います。カミソリ ビューをポータブル領域で動作させる方法はありますか?
3 に答える
私はしばらくこの特定の問題に苦労してきましたが、ついにそれを理解したと思います.
これが正しく機能するためには、フォルダー構造と、プロジェクト内で名前空間がどのように呼び出されるかが非常に重要です。
ここに、カミソリビューが埋め込まれたポータブルエリアの実例があります。
プロジェクトの構造を見てみましょう。
領域の名前はで、プロジェクトのルートに名前空間に存在UserAdministration
するクラスがあります。次に、フォルダ (通常の MVC プロジェクトと同様) があり、そのフォルダの下に、領域のビューを含むフォルダがあります。UserAdministrationRegistration
UserAdministration
Controllers
Models
Views
Views
UserAdministration
また、埋め込みビューが機能するために非常に重要なこと:ファイルのApplication_Start
メソッドに新しいビュー エンジンを登録する必要があります。global.asax.cs
PortableAreaRegistration.RegisterEmbeddedViewEngine();
そして...登録クラスで、RegisterArea
2つのパラメーター(AreaRegistrationContext context
およびIApplicationBus bus
)を取るメソッドをオーバーライドし、そこで基本実装を呼び出すようにしてください:
public override void RegisterArea(AreaRegistrationContext context,
IApplicationBus bus)
{
base.RegisterArea(context, bus); // <== very important!
context.MapRoute(
"UserAdministration",
AreaName + "/{controller}/{action}/{id}",
new { controller = "UserAdministration", action = "Index",
id = UrlParameter.Optional }
);
}
基本実装を呼び出さない場合は、少なくとも追加する必要があります
RegisterAreaEmbeddedResources();
埋め込まれたビューとリソースが登録されていることを確認します。
Fretjeの回答の指示に従ってこれを機能させ、Web サイトのEmbeddedResourceVirtualPathProviderへの nuget パッケージ参照を追加しました。
ポータブル領域でビューを埋め込みリソースとしてマークしたことを確認しましたか?
また、ポータブル領域の優れた機能は、埋め込まれたビューをオーバーライドできることであることがわかりました。そのため、同じ名前のビューをホストアプリに配置し、コードロジックが異なる埋め込みビューと同じ場所に配置すると、埋め込みビューよりも優先されます!!!
お役に立てれば