4

私は、ページを生成するためのメインエンジンとしてMVCを使用してcmsを作成しています。

私はうまくいっていますが、必要に応じて、サイトごとに、場合によってはビューごとに、独自のかみそりテンプレートを作成する機能が必要でした。

私のルールでは、各プロジェクトにはURLにリンクされた一意のコードが必要です。

各プロジェクトサイトのアセットは、場所がプロジェクトに関連する方法で保存されます。

したがって、プロジェクトC0001に関連付けられたアセットはassets\C0001\、C0002に格納さassets\C0002\れます。

私がやりたかったのは、物事を整頓するために、そのassets\[ProjectCode]場所にあるプロジェクトに関連付けられたかみそりのテンプレートを用意することでしたが、問題は、に関するエラーが発生することViewBag not existing in contextです。

したがって、これは機能しません。

Layout = string.Concat("~/assets/",ViewBag.ProjectNumber,"/_Layout.cshtml");

以下はページをレンダリングしますが、

Layout = string.Concat("~/Views/Shared/_",ViewBag.ProjectNumber,"Layout.cshtml");

最初のレイアウトは、ビューの既知の検索領域の外にあるため、レンダリングされないと思いますか?しかし、ファイルがどこにあるかを伝えているので、問題が何であるかわかりませんか?

例2のコードを使用して作業できてうれしいですが、かなりの数のプロジェクトサイトの後で、共有ビューディレクトリが非常にビジーになる可能性があります。

Viewsビューがディレクトリに存在する必要がある理由があるかどうか疑問に思っていますか?

4

2 に答える 2

7

Viewsディレクトリにあるweb.configをコピーして、そのコピーをディレクトリに配置する必要がありますAssets。レイアウトのフルパスを指定する必要があるため、これは検索パスの問題ではないため、ビューを適切に初期化するにはweb.configの情報が必要です。

于 2011-02-03T20:58:13.273 に答える
4

デフォルトでは、はディレクトリRazorViewEngineを検索するように構成されています。Views

これを変更するには、さまざまなパスを使用して独自のRazorViewEngineインスタンスを作成し、に追加しViewEngines.Enginesます。

デフォルトのパスは

AreaViewLocationFormats = new[] {
    "~/Areas/{2}/Views/{1}/{0}.cshtml",
    "~/Areas/{2}/Views/{1}/{0}.vbhtml",
    "~/Areas/{2}/Views/Shared/{0}.cshtml",
    "~/Areas/{2}/Views/Shared/{0}.vbhtml"
};
AreaMasterLocationFormats = new[] {
    "~/Areas/{2}/Views/{1}/{0}.cshtml",
    "~/Areas/{2}/Views/{1}/{0}.vbhtml",
    "~/Areas/{2}/Views/Shared/{0}.cshtml",
    "~/Areas/{2}/Views/Shared/{0}.vbhtml"
};
AreaPartialViewLocationFormats = new[] {
    "~/Areas/{2}/Views/{1}/{0}.cshtml",
    "~/Areas/{2}/Views/{1}/{0}.vbhtml",
    "~/Areas/{2}/Views/Shared/{0}.cshtml",
    "~/Areas/{2}/Views/Shared/{0}.vbhtml"
};

ViewLocationFormats = new[] {
    "~/Views/{1}/{0}.cshtml",
    "~/Views/{1}/{0}.vbhtml",
    "~/Views/Shared/{0}.cshtml",
    "~/Views/Shared/{0}.vbhtml"
};
MasterLocationFormats = new[] {
    "~/Views/{1}/{0}.cshtml",
    "~/Views/{1}/{0}.vbhtml",
    "~/Views/Shared/{0}.cshtml",
    "~/Views/Shared/{0}.vbhtml"
};
PartialViewLocationFormats = new[] {
    "~/Views/{1}/{0}.cshtml",
    "~/Views/{1}/{0}.vbhtml",
    "~/Views/Shared/{0}.cshtml",
    "~/Views/Shared/{0}.vbhtml"
};
于 2011-02-03T17:02:43.073 に答える