2013-02-15 12 views
7

Podczas korzystania @ Html.Raw (mystring) normalnie nie powoduje odpowiednio przykład:żyletka - @ Html.Raw() kodowania & jeszcze w znacznik meta atrybutów

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

będzie prawidłowo czyni <title>My Site&reg;</title> ale gdy używać w atrybucie:

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

świadczy on <meta name="description" content="My Site&amp;reg;" /> co nie jest prawidłowe, ponieważ wtedy nie będzie renderować zarejestrowany znak.

Jak poprawić to zachowanie?

+0

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

+0

@ Ek0nomik To naprawdę nie jest duplikat, ponieważ nikt nie rozwiązał tego pytania. Sugerowano załadowanie całego tagu do napisu, co jest głupie na każdej stronie. – ddilsaver

+0

Możesz po prostu dołączyć nazwę atrybutu w parametrze do '.Raw', jak pokazano w drugim pytaniu, do którego link znajduje się powyżej. Będziesz musiał wykonać jakąś pracę, ponieważ jest to błąd: http://aspnetwebstack.codeplex.com/workitem/393. –

Odpowiedz

6

Jako że w jego odpowiedzi można znaleźć patridge pointed można po prostu uwzględnić znacznik atrybutu w parametrze .Raw.

W twoim przypadku, który powodowałby coś podobnego do poniższego:

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

Wygląda paskudnie, ale działa – krzychu

+1

@Justin Helgerson W to tylko sposób, w jaki to zrobiłem, dzięki! –

0

Można to zrobić w swoim _layout.cshtml:

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

ten pracował dla mnie.

0

myślę, że to jest tip-top rozwiązanie:

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