使用剃刀,可以使用以下方式呈现特定的样式表包:
@Styles.Render("~/Content/css")
这是指BundleConfig
文件中包含以下行:
bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));
...指向site.css
文件夹内的Content
文件。
我想设置一个变量(我已尝试过会话变量),如下所示:
Session["cssTheme"] = "~/Content/css";
所以我可以将它放在Styles.Render
函数中,如下所示:
@Styles.Render(@Session["cssTheme"])
但它得到了无效参数的错误。
我想这样做,所以我可以更改会话变量值(到另一个样式包),这样就可以改变我的Web应用程序的css样式。
那么,如何将已编辑的变量传递到Styles.Render
函数?
答案 0 :(得分:0)
首先,Session
是动态的,这意味着它可以容纳任何类型。当你提取一个值时,它在技术上属于object
类型。 Styles.Render
需要string
类型的参数,因此您需要先将值转换为string
:
@Styles.Render(@Session["cssTheme"] as String)
然后,如果根本没有设置该会话变量,或者已将其设置为不能转换为字符串的字符串值以外的其他值,则可能会收到空值。因此,为了弥补这一点,您应该为空值提供一些后备:
@Styles.Render(@Session["cssTheme"] as String ?? "~/Content/css")
现在,它将使用会话变量中的任何内容,或“〜/ Content / css”作为最后的手段。但请记住,这仍然非常脆弱。如果将Session["cssTheme"]
设置为字符串,但没有设置正确格式化的bundle引用,那么您仍然会收到错误,并且运行时出现错误,这很难看。理想情况下,您应该进行某种价值清理程序,在将Session["cssTheme"]
传递给Styles.Render
之前先运行{{1}}。
答案 1 :(得分:0)
假设你的模型是MyModel,它有字符串属性StyleSheet 所以你有你的观点
@model MyModel
@Styles.Render(model.StyleSheet)
此外,您可以从Session中设置此属性,如下所示
public StyleSheet {
get {
if(Session["cssTheme"]!=null)
return Session["cssTheme"] as String
else
return "defaultTheme";
}
set
{
Session["cssTheme"]=value;
}
}