2011-04-18 25 views
16

簡単なプラグインアーキテクチャを作成する最良の方法のように、ASP.NET MVC 3とカミソリビューでポータブルビューを使用しようとしています。だから私は私のクラスライブラリのセットアップを持って、私は私のビュー/Views/Admin/Index.cshtmlに位置し、それは組み込みリソースとして設定されています。私はそのプロジェクトをメインWebアプリケーションプロジェクトの依存関係として追加します。 Adminコントローラ、インデックスアクションにアクセスしようとすると、そのビューファイルが見つからないというメッセージが表示されます(コントローラが正しく組み込まれているため)。私はそれがメインエリアのWebアプリケーションプロジェクトではなく、ポータブルエリアのバイナリではないと考えています。カミソリの景色をポータブルエリアで扱う方法はありますか?ASP.NET MVC 3、Razor Views、およびPortable Areas

答えて

0

ポータブルエリアに埋め込みリソースとしてビューをマークしたことを確認しましたか?

また私は、埋め込みビューをオーバーライドすることができるということがわかりました。異なるコードロジックを持つ組み込みビューの同じ名前と場所を持つホストアプリケーションにビューを配置すると、埋め込まれた1つのニース!

希望これは

+0

私は登録されたビューエンジンの順序に依存していると思いますが、埋め込みビューエンジンが最初の場合、ポータブルエリアビューはルートプロジェクトの通常ビューよりも優先されます。副次的なこととして、すべてのビューエンジンをクリアして、あなたのプロジェクトで使用しているものだけを登録していることを確認して、パフォーマンスの向上を得られることがあります。 http://insightpassion.com/norbertraus/index.php/2011/04/29/razor-views-performance/ – JohannesH

12

を支援します私はしばらくの間、この特定の問題で苦労してきたが、私はついにそれを考え出したと思います。

プロジェクト内でフォルダ構造と名前空間がどのように呼び出されるかは、正しく機能するためには非常に重要です。

https://github.com/fretje/MembershipStarterKit

は、プロジェクトの構造を見てみましょう:

私はここに埋め込まれたかみそりを望むポータブルエリアの作業例を持っています。

エリアの名前はUserAdministrationであり、プロジェクトのルートにはUserAdministration名前空間にあるUserAdministrationRegistrationクラスがあります。 次にControllersModelsViewsフォルダ(通常のMVCプロジェクトのような)があり、Viewsフォルダの下には、その領域のビューを含むUserAdministrationフォルダがあります。

埋め込みビューを動作させるために非常に重要なこともあります:global.asax.csファイルのApplication_Startメソッドで新しいビューエンジンを登録する必要がありますか?

ご登録クラスで
PortableAreaRegistration.RegisterEmbeddedViewEngine(); 

そして...、あなたは2つのパラメータ(AreaRegistrationContext contextIApplicationBus bus)を取りRegisterAreaメソッドをオーバーライドし、そこに基本実装を呼び出すことを確認してください。

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(); 

埋め込まれたビューとリソース登録される。

+0

この回答をありがとう、正確に私が探していたものを参照してください。私はまだビューがエラーが見つかりませんが取得します。それは埋め込まれているものの、まだ何もありません。 – Pieter

+0

これを動作させるには、WebサイトのEmbeddedResourceVirtualPathProviderへのナゲットパッケージリファレンスを追加する必要がありました。 – Pieter

+0

これは私が持っていたものと同じように見えます。それは私のdevマシン上で正常に動作しますが、実際には配備された書き込みビューファイルを参照しません。私はそれが探していたビューを記録し、_layoutと_viewstartのものは見つけましたが、.cshtmlファイルを完全にスキップしました。 –

1

私はFretjeの答えの指示に従うことによって、この作業を持って、そしてまた、あなたのウェブサイトに EmbeddedResourceVirtualPathProvider にnugetパッケージ参照を追加します。

+0

ちょうど参照?あなたはそれを取り入れるために何をしましたか? –

+1

Visual Studioで、ソリューションエクスプローラで参照を右クリックし、[ライブラリパッケージ参照の追加]を選択します。ポップアップで「online」を選択し、「EmbeddedResourceVirtualPathProvider」を検索してからinstallをクリックします。 NugetパッケージインストーラのためにService Pack 1にアップデートされたVS2010が必要であることに注意してください。 – Pieter

関連する問題