2013-02-15 13 views
7

Wenn ich @ Html.Raw (mystring) Normal es richtig macht Beispiel:Razor - @ Html.Raw() noch kodiert & in Meta-Tag-Attribute

@{ ViewBag.Title = "My Site®"; } 
<title>@Html.Raw(ViewBag.Title)</title> 

richtig <title>My Site&reg;</title> machen wird, aber wenn ich es verwenden in einem Attribut:

<meta name="description" content="@Html.Raw(ViewBag.Title)" /> 

es macht <meta name="description" content="My Site&amp;reg;" />, die wegen nicht korrekt ist, dann wird es nicht die registrierte Marke machen.

Wie korrigieren Sie dieses Verhalten?

+0

Duplizieren: http://stackoverflow.com/questions/11963453/why-is-html-raw-escaping-ampersand-in-anchor-tag -in-asp-net-mvc-4 und http://stackoverflow.com/questions/12321616/why-is-mvc-4-razor-escaping-ampersand-when-using-html-raw-in-a-title -Attribut –

+0

@ Ek0nomik Es ist nicht wirklich ein Duplikat, weil niemand diese Frage gelöst hat. Ihr Vorschlag war, laden Sie das ganze Tag in die Zeichenfolge und das ist dumm auf jeder Seite zu tun. – ddilsaver

+0

Sie können einfach den Attributnamen in den Parameter '.Raw' einfügen, wie in der zweiten, oben verlinkten Frage gezeigt. Sie müssen eine Arbeit erledigen, da dies ein Fehler ist: http://aspnetwebstack.codeplex.com/workitem/393. –

Antwort

6

Wie patridge pointed in seiner Antwort können Sie nur die Attribut-Markup in den Parameter zu .Raw.

In Ihrem Fall, die in etwas ähnlich dem folgenden führen würde:

<meta name="description" @Html.Raw("content=\"My Site&amp;reg;\"") /> 
+0

Sieht böse, aber funktioniert – krzychu

+1

@Justin Helgerson In der Tat ist dies die einzige Möglichkeit, die ich es geschafft habe, danke! –

0

Sie dies in Ihrem _layout.cshtml tun können:

<title>@{var title = new HtmlString(ViewBag.Title);}@title</title> 

Das ist für mich gearbeitet.

0

Ich denke, es ist die Tip-Top-Lösung:

@{ ViewBag.Title = "My Site&reg;"; } 
<title>@Html.Raw(ViewBag.Title)</title> 
<meta name="description" content="@HttpUtility.HtmlDecode(ViewBag.Title)" />