2013-04-01 5 views
6

ビュー、コントローラ、モデルをグループ化しています。 構造はASP.NET MVCのオーバーライドされたビューパス(ロケーションフォーマット)で共有レイアウトが見つかりません

~/Controllers 
-- /_Shared 
-- -- /Views 
-- -- /Content 
-- -- /Scripts 
-- /Home 
-- -- /Models 
-- -- /Content 
-- -- /Scripts 
-- -- /Views 
-- -- HomeController.cs 
-- /Account 
-- -- /Models 
-- -- /Views 
... 

ビューと部分ビューが動作しているが、レイアウト(マスタービュー)はない作業を行います。私のような.cshtmlファイル内のレイアウトを指定する場合:

@{ Layout = "SimpleSharedLayout"; } 

私はこのエラーを取得する:レイアウトページ「SimpleLayoutは、」次のパスで見つかりませんでした。

"~/Controllers/Account/Views/SimpleSharedLayout".

のみAsp.NETうまくこの作品が

*現在のコントローラのディレクトリにレイアウトを検索しは(〜/コントローラ/ _shared /ビューにある)共有フォルダ *には見えません。

@Html.Partial("SharedPartialView") 

私がやるのは難しいものではありませんが、私はそれを動作させることができないことに関するクレイジーだ

@{ Layout = "~/Controllers/_Shared/Views/SimpleSharedLayout.cshtml"; } 

のような完全なパスとレイアウトを指定する必要があります。 IIS Expressを使用

、VS 2012、.NET 4.5

あなたは私が欠けているかについてのアイデアを持っていますか?

マイビューエンジン:

public class AreaViewEngine : RazorViewEngine 
{ 
    public AreaViewEngine() 
    { 
     AreaViewLocationFormats = new[] { 
         "~/Controllers/{1}/Views/{0}.cshtml", 
         "~/Controllers/_Shared/Views/{0}.cshtml"}; 

     ViewLocationFormats = AreaViewLocationFormats; 

     AreaMasterLocationFormats = new[] { "~/Controllers/_Shared/Views/{0}.cshtml" }; 

     MasterLocationFormats = AreaMasterLocationFormats; 

     AreaPartialViewLocationFormats = new[] { "~/Controllers/_Shared/Views/{0}.cshtml", 
         "~/Controllers/{1}/Views/{0}.cshtml"}; 

     PartialViewLocationFormats = AreaPartialViewLocationFormats; 
    } 
} 

答えて

2

IMHO、あなたはフレームワークの規約を戦っています。エリアを作成することでこれらのシナリオで意図された方法でフレームワークを利用することが私のお勧めです。

私はそれはおそらくあなたが望む答えではないのですけど、私は何を説明してきたことへのエリアであるように感じるT.

+0

ええ、コントローラを開くと、そのコントローラに関連するすべてのファイルが表示されます。彼らはビュー、カスタムCSSとjsのファイルとモデルです。とにかく彼らが別々のフォルダに入っているのはなぜですか?私がコントローラを使って作業しているときは、関連するモデルと関連するビューを同時に扱います。そして、はい、エリアは私が探している機能ではありません。私が作り出したのは、分野と古典的アプローチの間にあります。 – Seregwethrin

+0

あなたは同化されます。抵抗しても無駄だ。 :)すべての深刻さにおいて、あなたはあなたが望むように国際大会を行うことができますが、ある時点で、その努力がすべての価値があるかどうかを問う必要があります。あなたのフロンティア精神を挫折させるのは私の夢ではありませんが、私は自分の時間を地域に入れ、プロジェクトをできる限り最善にすることに集中します。幸運であれ友よ。 –

+0

私はあなたに完全に同意します、それは確かです。私はすでに諦めました:) Even Resharperはいくつかの意見をポップアップせず、私を狂ってしまいます。私は元の構造に戻らなければならないと思います... – Seregwethrin

0

ViewEngineをオーバーロードし、AreaMasterLocationFormatsとMasterLocationFormatsを上書きしてください。 この他の驚くべき答えをチェックしてください、それは多分あなたが探しているものです。

How to set a Default Route (To an Area) in MVC

タイトルを無視し、それがルートを本当にないのですが、どこで、どのようviewEngine検索ファイル用。

関連する問題