1

我无法让我的 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 中工作,所以我想知道我做错了什么?

4

1 回答 1

2

使用Html.Action代替Html.RenderAction

<link href="@(Html.Action("CustomStyleSheetPath)", "Shared"))" 
      rel="Stylesheet" type="text/css" />

Html.ActionMcvHtmlString将在一段时间内返回呈现的 HTMLHtml.RenderAction直接写入响应。

在 MVC4 中有一个称为条件属性的新功能,这就是它不起作用的原因。

因为Html.RenderAction不会返回任何东西,所以属性href不会被渲染,但另一方面会Html.RenderAction直接写入响应,所以你会得到这个混乱的结果。

于 2012-09-07T08:08:38.880 回答