Razor - @Html.Raw() masih mengkodekan atribut meta tag

Ketika saya menggunakan @Html.Raw(mystring) normal, contohnya ditampilkan dengan benar:

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

Akan merender <title>My Site&reg;</title> dengan benar tetapi ketika saya menggunakannya dalam atribut:

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

Ini menghasilkan <meta name="description" content="My Site&amp;reg;" /> yang tidak benar karena tidak akan menghasilkan merek terdaftar.

Bagaimana Anda memperbaiki perilaku ini?


person ddilsaver    schedule 15.02.2013    source sumber
comment
Duplikat: stackoverflow.com/questions/11963453/ dan stackoverflow.com/ pertanyaan/12321616/   -  person Justin Helgerson    schedule 15.02.2013
comment
@Ek0nomik Ini sebenarnya bukan duplikat karena tidak ada yang menjawab pertanyaan itu. Saran mereka adalah memuat seluruh tag ‹meta /› ke dalam string dan itu adalah tindakan bodoh di setiap halaman.   -  person ddilsaver    schedule 15.02.2013
comment
Anda cukup memasukkan nama atribut dalam parameter ke .Raw seperti yang ditunjukkan pada pertanyaan kedua yang ditautkan di atas. Anda harus melakukan penyelesaian karena ini adalah bug: aspnetwebstack.codeplex.com/workitem /393.   -  person Justin Helgerson    schedule 15.02.2013
comment
@Ek0nomik Saya tidak melihat pertanyaan kedua saat pertama kali melihatnya. Itu memiliki solusi yang lebih baik. Anda dapat mempostingnya sebagai jawaban jika Anda mau. Kalau tidak, saya akan memposting solusi kode saya sehingga tersedia.   -  person ddilsaver    schedule 15.02.2013
comment
Jangan khawatir. Saya menambahkan jawaban. Semoga berhasil!   -  person Justin Helgerson    schedule 15.02.2013


Jawaban (3)


Sebagai patridge ditunjukkan dalam jawabannya Anda cukup memasukkan markup atribut dalam parameter ke .Raw.

Dalam kasus Anda, hal itu akan menghasilkan sesuatu yang serupa dengan yang berikut:

<meta name="description" @Html.Raw("content=\"My Site&amp;reg;\"") />
person Justin Helgerson    schedule 15.02.2013
comment
@Justin Helgerson Sebenarnya ini adalah satu-satunya cara saya membuatnya berhasil, terima kasih! - person Oscar Ortiz; 19.05.2016

Anda dapat melakukan ini di _layout.cshtml Anda:

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

Ini berhasil untuk saya.

person Kostas Petrianakis    schedule 24.01.2014

Saya pikir ini adalah solusi terbaik:

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