我想动态更改 CSS 文件(动态)。我正在使用 Razor 视图在 MVC 4 中进行开发。目前,它们已从 web.config 中提取...
我的捆绑注册
bundles.Add(New StyleBundle("~/Content/themes/" + Domain.GetTheme + "/css").Include(
"~/Content/themes/" + Domain.GetTheme + "/Main.css",
"~/Content/themes/" + Domain.GetTheme + "/Content.css"))
剃刀视图
@Styles.Render("~/Content/themes/" + Domain.GetTheme + "/css")
GetTheme 属性中的代码
Public Shared ReadOnly Property GetTheme As String
Get
Return ConfigurationManager.AppSettings("Theme")
End Get
End Property
我不确定这是否是最好的方法,但它确实有效。
研究至今...
但现在我想即时更改主题。我最初的想法是访问查询字符串参数。所以如果它包含 ?Theme=Green 那么 CSS 文件会选择绿色版本。查询字符串值将存储在会话状态中,以便 CSS 将继续使用绿色,直到通过查询字符串再次更改。
我首先创建了一个可以应用于我的控制器的属性......
属性
Public Class LoadThemeAttribute
Inherits ActionFilterAttribute
Public Overrides Sub OnActionExecuted(filterContext As ActionExecutedContext)
MyBase.OnActionExecuted(filterContext)
If HttpContext.Current.Request.QueryString("Theme") IsNot Nothing Then
HttpContext.Current.Session("Theme") = HttpContext.Current.Request.QueryString("Theme")
End If
End Sub
End Class
控制器
<LoadTheme>
Public Class CompanyController
Inherits System.Web.Mvc.Controller
...
End Class
然后在我的 _Layout.vbhtml razor 视图中,我覆盖 CSS 文件,如下所示:-
@If Session("Theme") IsNot Nothing Then
@<link href="/Content/themes/@Session("Theme")/Main.css" rel="stylesheet"/>
@<link href="/Content/themes/@Session("Theme")/Content.css" rel="stylesheet"/>
Else
@Styles.Render("~/Content/themes/" + Domain.GetTheme + "/css")
End If
我不能使用 Render 语句,我假设这是因为它在项目加载时被调用一次并且不能再次调用。我当然无法让它工作。
所以我的问题是:- 一切似乎都有效,但我只想知道这是否是一个好方法 - 这是更改 CSS 文件的好 MVC 方法吗?