ASP.NET MVC 5 - 将用户选择的样式表传递给_Layout.cshtml

时间:2016-01-09 12:25:39

标签: c# asp.net-mvc asp.net-mvc-5

我创建了一个“设置”页面,用户可以从下拉列表中选择Bootswatch主题。 CSS主题文件位于~/Content/themes。相应的SettingsController将此主题选择的名称存储在数据库中。 如何使用 @Scripts.Render("~/Content/themes" + themeName)将值加载到_Layout视图中?这样主题就会加载到每一页上。

我正在努力解决_Layout.cshtml没有控制器以及我应该如何从数据库中获取数据的事实,即使用模型或控制器,或其他完全不同的东西。

这是一个简化的结构概述:

Website
    Areas
        User
            Controllers
                >SettingsController.cs //here I store the value in the db
            Views
                Settings
                    >Index.cshtml //settings page view
            >_ViewStart.cshtml
    Controllers
    Views
        Shared
            >_Layout.cshtml
        >_ViewStart.cshtml

1 个答案:

答案 0 :(得分:0)

您可以从数据库中读取当前选定的布局,并根据您的布局选择。你可以这样想:

switch (SystemInfo.Theme)
        {
            case 1:
                Layout = "~/Views/Shared/Layouts/Themes/Blue/_LayoutMain.cshtml";
                break;
            case 2:
                Layout = "~/Views/Shared/Layouts/Themes/nice/_LayoutMain.cshtml";
                break;
           default:

            Layout = "~/Views/Shared/Layouts/Themes/default/_LayoutMain.cshtml";
            }

您可以将此代码放在_viewstart中,不要为视图设置Layout