6

ビュー、コントローラー、モデルをグループ化しています。構造は

~/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 フォルダーを調べません*(~/Controllers/_Shared/Views にあります)*

これはうまくいきますが。

@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;
    }
 }
4

2 に答える 2

2

私見、あなたはフレームワークの慣習と戦っています。エリアを作成して、このようなシナリオでフレームワークを意図したとおりに使用することをお勧めします。

おそらくあなたが望む答えではないことはわかっていますが、あなたが説明したのはAreas to a T.

于 2013-04-04T22:06:07.483 に答える
0

ViewEngine をオーバーロードして、AreaMasterLocationFormats と MasterLocationFormats を上書きしてみてください。この他の驚くべき答えを確認してください。それはおそらくあなたが探しているものです。

MVC で (エリアへの) デフォルト ルートを設定する方法

タイトルは無視してください。実際にはルートについてではなく、viewEngine がファイルを検索する場所と方法についてです。

于 2013-06-13T21:44:30.170 に答える