在ASP.NET MVC3的site.master页面中将CSS实现为变量

时间:2011-09-13 16:56:37

标签: asp.net css asp.net-mvc-3 site.master

我正在使用ASP.NET MVC3实现一个Web应用程序。在应用程序中,我想添加基于单击某些链接在CSS文件(主题)之间切换的选项。我做了一些研究,我想出了以下内容:

  1. 要将数据传递给site.master,最好的解决方案是创建一个抽象控制器并将其继承到其他控制器中,这些控制器将site.master作为模板,根据这篇文章:Passing Data to View Master Pages
  2. 我可以将一个viewbag消息传递给控制css文件URL的链接,以根据我看到传递给site.master页面顶部脚本的代码来设置当前要使用的css文件:< / LI>

    script src =“&lt;%:Url.Content(”〜/ Scripts / jquery-1.5.1.min.js“)%&gt;”类型= “文本/ JavaScript的”

    所以我使用以下方法创建了一个抽象控制器ApplicationController:

    public ApplicationController()
        {ViewBag.NewMessage = "../../Content/Site2.css";}
    

    在site.master中,我包含了这个链接:

    <link href="<%: (string) ViewBag.NewMessage %>" rel="stylesheet" type="text/css" />
    

    然而,这似乎不起作用,因为它被解释为:

    <link href="&lt;%: (string) ViewBag.NewMessage %>" rel="stylesheet" type="text/css" />
    

    仅当我删除引号时:

    <link href=<%: (string) ViewBag.NewMessage %> rel="stylesheet" type="text/css" />
    

    是否正确解释(并且网页使用正确的css呈现),除了它违反了html标准:

    <link href=../../Content/Site2.css rel="stylesheet" type="text/css" />
    

    有关如何解决这个问题的任何建议,还是有一个更优雅的解决方案,我错过了?我将继续并在ApplicationController中实现变量,这些变量根据用户在页面顶部点击的链接进行选择,以便在CSS样式之间切换。

    谢谢!

1 个答案:

答案 0 :(得分:2)

检查以确保您的<head>代码没有runat="server"

进行此更改后,请务必检查脚本和css标记。如果您使用~/来修改应用根,则此更改可能会破坏路径。要解决此问题,请使用Url.Content(...)帮助程序。