1

一部のビジネス ロジックに基づいて、layout.cshtml に動的に選択された CSS ファイルを設定するのに問題があります。

私のlayout.cshtmlには、headセクションに次のものがあります。

<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.ActionMcvHtmlStringwhileはレンダリングされた HTML を返し、Html.RenderActionレスポンスに直接書き込みます。

MVC4 には、条件付き属性と呼ばれる新しい機能があるため、機能していません。

何も返さないためHtml.RenderAction、属性hrefはレンダリングされませんが、もう一方の手Html.RenderActionは応答に直接書き込むため、このめちゃくちゃな結果が得られます。

于 2012-09-07T08:08:38.880 に答える