我有一个问题是让我的layout.cshtml有一个基于某些业务逻辑的动态选择的CSS文件。
在我的layout.cshtml中,我的脑部有以下内容:
<head>
<link href="@{Html.RenderAction("CustomStyleSheetPath", "Shared");}" rel="Stylesheet" type="text/css" />
</head>
在我的“共享”控制器中,我有:
[ChildActionOnly]
public virtual string CustomStyleSheetPath()
{
string customCssPath = GetCssPath(); // e.g. "css/customStyleSheet.css"
return customCssPath;
}
当我显示页面时,css未正确拉入,当我查看来源时,我有以下内容:
<head>
<linkcss\customStyleSheet.css href="" rel="Stylesheet" type="text/css" />
</head>
此代码曾用于MVC 3,所以我想知道我做错了什么?
答案 0 :(得分:2)
使用Html.Action
代替Html.RenderAction
<link href="@(Html.Action("CustomStyleSheetPath)", "Shared"))"
rel="Stylesheet" type="text/css" />
Html.Action
将在McvHtmlString
中返回呈现的HTML,而Html.RenderAction
直接写入回复。
在MVC4中有一个名为conditional attributes的新功能,这就是它无法正常工作的原因。
因为Html.RenderAction
不会返回任何内容,所以不会呈现属性href
,而另一只手Html.RenderAction
会直接写入响应,因此您会得到这个混乱的结果。< / p>