Razor - @Html.Raw() ยังคงเข้ารหัสในแอตทริบิวต์เมตาแท็ก

เมื่อฉันใช้ @Html.Raw(mystring) ปกติ มันจะแสดงผลตัวอย่างอย่างถูกต้อง:

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

จะเรนเดอร์ <title>My Site&reg;</title> อย่างถูกต้อง แต่เมื่อฉันใช้มันในแอตทริบิวต์:

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

มันแสดงผล <meta name="description" content="My Site&amp;reg;" /> ซึ่งไม่ถูกต้องเพราะจะไม่แสดงเครื่องหมายที่ลงทะเบียนไว้

คุณจะแก้ไขพฤติกรรมนี้ได้อย่างไร?


person ddilsaver    schedule 15.02.2013    source แหล่งที่มา
comment
ซ้ำกัน: stackoverflow.com/questions/11963453/ และ stackoverflow.com/ คำถาม/12321616/   -  person Justin Helgerson    schedule 15.02.2013
comment
@ Ek0nomik มันไม่ซ้ำกันจริงๆเพราะไม่มีใครแก้ไขคำถามนั้นได้ ข้อเสนอแนะคือให้โหลดแท็ก ‹meta /› ทั้งหมดลงในสตริง ซึ่งเป็นการกระทำที่โง่เขลาในทุกหน้า   -  person ddilsaver    schedule 15.02.2013
comment
คุณสามารถใส่ชื่อแอตทริบิวต์ในพารามิเตอร์เป็น .Raw ดังที่แสดงในคำถามที่สองที่ลิงก์ด้านบน คุณจะต้องแก้ไขเนื่องจากนี่คือจุดบกพร่อง: aspnetwebstack.codeplex.com/workitem /393.   -  person Justin Helgerson    schedule 15.02.2013
comment
@ Ek0nomik ฉันไม่เห็นคำถามที่สองเมื่อดูครั้งแรก มันมีทางออกที่ดีกว่า คุณสามารถโพสต์เป็นคำตอบได้หากต้องการ ไม่เช่นนั้น ฉันจะโพสต์โซลูชันโค้ดของฉันเพื่อให้พร้อมใช้งาน   -  person ddilsaver    schedule 15.02.2013
comment
ไม่ต้องห่วง. ฉันเพิ่มคำตอบ ขอให้โชคดี!   -  person Justin Helgerson    schedule 15.02.2013


คำตอบ (3)


ในฐานะ patridge ชี้ให้เห็นในคำตอบของเขาว่าคุณสามารถรวมมาร์กอัปแอตทริบิวต์ในพารามิเตอร์เป็น .Raw ได้

ในกรณีของคุณนั่นจะส่งผลให้มีสิ่งที่คล้ายกันดังต่อไปนี้:

<meta name="description" @Html.Raw("content=\"My Site&amp;reg;\"") />
person Justin Helgerson    schedule 15.02.2013
comment
@ Justin Helgerson นี่เป็นวิธีเดียวที่ฉันทำให้มันใช้งานได้จริงขอบคุณ! - person Oscar Ortiz; 19.05.2016

คุณสามารถทำได้ใน _layout.cshtml ของคุณ:

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

สิ่งนี้ได้ผลสำหรับฉัน

person Kostas Petrianakis    schedule 24.01.2014

ฉันคิดว่ามันเป็นวิธีแก้ปัญหาขั้นสูงสุด:

@{ 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