4

私の MVC プロジェクトの 1 つで、テスト展開サイト用に特別な構成をセットアップしました。これにより、構成変換を追加して、web.config ファイルのさまざまな設定をオーバーライドすることができました。たとえば、次のファイルがあります。

web.config
web.release.config
web.debug.config
web.testsite.config

テスト サイトにデプロイすると、web.testsite.config で指定された一部の設定が上書きされるようになりました

一部のビューで同じ動作をすることは可能ですか? たとえば、Index.testsite.cshtml を作成できますか? 構成からのフラグを使用して動作のオンとオフを切り替えることができますが、構成に基づいて追加の変換/置換ビューを許可することがよりクリーンなアプローチのようです。

4

3 に答える 3

1

あなたに追加Base/Controller

protected override void OnResultExecuting(ResultExecutingContext filterContext)
{
    var viewResult = filterContext.Result as ViewResult;

    if (viewResult != null)
    {
        string env = ... // determine your environment somehow

        var razorEngine = viewResult.ViewEngineCollection.OfType<RazorViewEngine>().Single();
        var viewName = !String.IsNullOrEmpty(viewResult.ViewName) ? viewResult.ViewName : filterContext.RouteData.Values["action"].ToString();
        var razorView = razorEngine.FindView(filterContext.Controller.ControllerContext, viewName, viewResult.MasterName, false).View as RazorView;
        var currentPath = razorView.ViewPath;
        var newPath = currentPath.Replace(".cshtml", env + ".cshtml");

        if (razorEngine.FileExists(filterContext.Controller.ControllerContext, newPath))
            viewResult.View = new RazorView(filterContext.Controller.ControllerContext, newPath, razorView.LayoutPath, razorView.RunViewStartPages, razorView.ViewStartFileExtensions);
    }

    base.OnResultExecuting(filterContext);
}

また、MVC 4 (したがってWebPages2.0) を使用している場合はDisplayModeProvider、これを簡単に実現するために使用できます。

あなたのGlobal.asax

protected void Application_Start()
    {
        DisplayModeProvider.Instance.Modes.Add(new DefaultDisplayMode("debug")
        {
            ContextCondition = (context => context.IsDebuggingEnabled)
        });

        DisplayModeProvider.Instance.Modes.Add(new DefaultDisplayMode("test")
        {
            ContextCondition = (context => context.Request.IsLocal)
        });
     }
于 2013-06-13T20:19:48.820 に答える