0

現在、アプリケーション構成ファイルの設定を検出し、それに応じてビュー ファイルの末尾に文字列を追加するカスタム ビュー エンジンがあります。例として州を使用すると、バーモントが検出された場合、"_VT"View ファイル名の末尾に追加されます。それは正常に動作し、何も"_VT"見つからない場合は、特別な末尾のないファイルにデフォルト設定されます。

Razor ビュー内で、ビューLayout = ""のレイアウトを指定するオプションを使用できます。私の質問は、ビュー エンジンで行ったのと同様のことをレイアウトに対して行う方法はありますか? 基本的にconfigでVermontが検出された場合"_VT"、Layout Viewのファイル名に追加します。

現在のビュー エンジン:

public class PlanSpecificRazorViewEngine : RazorViewEngine
{
    public PlanSpecificRazorViewEngine()
    {
        ViewLocationFormats = new[] { "~/Views/{1}/{0}.cshtml", "~/Views/Shared/{0}.cshtml" };
        PartialViewLocationFormats = new[] { "~/Views/{1}/{0}.cshtml", "~/Views/Shared/{0}.cshtml" };
        AreaViewLocationFormats = new[] { "~/Areas/{2}/Views/{1}/{0}.cshtml", "~/Areas/{1}/Views/Shared/{0}.cshtml" };
        AreaPartialViewLocationFormats = new [] {"~/Areas/{2}/Views/{1}/{0}.cshtml", "~/Areas/{2}/Views/Shared/{0}.cshtml" };
    }

    public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
    {
        string Plan = System.Configuration.ConfigurationManager.AppSettings["Plan"];
        return base.FindView(controllerContext, viewName + "_" + Plan, masterName, useCache);
    }

    public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache)
    {
        string Plan = System.Configuration.ConfigurationManager.AppSettings["Plan"];
        return base.FindPartialView(controllerContext, partialViewName + "_" + Plan, useCache);
    }
}
4

1 に答える 1

0

MasterLocationFormatsコンストラクターでデフォルトを設定できます。

public PlanSpecificRazorViewEngine()
{
    ...

    string Plan = System.Configuration.ConfigurationManager.AppSettings["Plan"];
    MasterLocationFormats = new string[] 
    { 
        "~/Views/Shared/{0}_" + Plan + ".cshtml",
        "~/Views/Shared/{0}_" + Plan + ".vbhtml"
    };
}
于 2012-05-31T15:02:33.553 に答える