如何在mvc3中动态更改主题

时间:2012-03-02 05:31:52

标签: css asp.net-mvc-3 model-view-controller

我想在用户选择上更改我的网页主题 我正在使用MVC3。 我的想法是在Content文件夹中包含各种样式表,让_layout.cshtml文件决定在用户​​选择时调用哪个css文件 目前我所能做的就是包含一个反映在所有页面上的标签 我希望视图相同,但样式表应该在选择时改变。

我在_Layout.cshtml中尝试了这段代码:

    <script type="text/javascript">
    function loadjscssfile(filename) {
        var fileref = document.createElement("link")
        fileref.setAttribute("rel", "stylesheet")
        fileref.setAttribute("type", "text/css")
        fileref.setAttribute("href", filename)
    }
    if (typeof fileref != "undefined")
        document.getElementsByTagName("head")[0].appendChild(fileref)   

Inside Body标签:

<select>
        <option onclick="loadjscssfile("@Url.Content("~/Content/Site1.css")")">Theme1</option>
        <option onclick="loadjscssfile("@Url.Content("~/Content/Site2.css")")">Theme2</option>
        </select>  

但这也行不通:( 请帮帮我。我是MVC3的新手......

2 个答案:

答案 0 :(得分:1)

这篇文章可以帮到你:

ASP.NET MVC Theme Supported Razor View Engine

<强>更新 此示例不会使用mvc3进行编译。您应该为

做一些“查找和替换”
ViewModel.Title -> ViewBag.Title
ViewModel.Message -> ViewBag.Message
ViewModel.PasswordLength -> ViewBag.PasswordLength

return new ViewEngineResult(CreateView(controllerContext, viewPath, masterPath), this, incompletMatch); -> return new ViewEngineResult(CreateView(controllerContext, viewPath, masterPath), this);

答案 1 :(得分:0)

我认为如果你保留一个样式表并且只更改你身体标签上的一个类

会更好
<body class="red|blue">
    //your content
</body>

并在样式表中,您只为每个选择器添加不同的样式

.red{
    background-color: red;
}

.blue{
    background-color: blue;
}