Html.RenderAction在MVC 4中不适用于动态CSS路径

时间:2012-09-07 07:59:22

标签: razor asp.net-mvc-4

我有一个问题是让我的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,所以我想知道我做错了什么?

1 个答案:

答案 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>