คุณควรใช้IHtmlString
แทน:
IHtmlString str = new HtmlString("<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>");
เมื่อใดก็ตามที่คุณมีคุณสมบัติของโมเดลหรือตัวแปรที่ต้องใช้ HTML ฉันรู้สึกว่านี่เป็นแนวทางปฏิบัติที่ดีกว่า ก่อนอื่นทำความสะอาดสักหน่อย ตัวอย่างเช่น:
@Html.Raw(str)
เปรียบเทียบกับ:
@str
นอกจากนี้ฉันยังคิดว่ามันปลอดภัยกว่าเล็กน้อยเมื่อเทียบกับการใช้@Html.Raw()
งานเนื่องจากกังวลว่าข้อมูลของคุณจะเป็น HTML หรือไม่ในคอนโทรลเลอร์ของคุณ ในสภาพแวดล้อมที่คุณมีนักพัฒนาส่วนหน้าและส่วนหลังนักพัฒนาส่วนหลังของคุณอาจปรับแต่งกับข้อมูลที่สามารถเก็บค่า HTML ได้มากขึ้นดังนั้นจึงควรเก็บข้อกังวลนี้ไว้ในส่วนหลัง (ตัวควบคุม)
โดยทั่วไปฉันพยายามหลีกเลี่ยงการใช้Html.Raw()
ทุกครั้งที่ทำได้
อีกสิ่งหนึ่งที่น่าสังเกตคือฉันไม่แน่ใจว่าคุณมอบหมายงานที่ไหนstr
แต่มีบางสิ่งที่เกี่ยวข้องกับฉันว่าคุณจะนำสิ่งนี้ไปใช้อย่างไร
ขั้นแรกควรทำในคอนโทรลเลอร์โดยไม่คำนึงถึงโซลูชันของคุณ ( IHtmlString
หรือHtml.Raw
) คุณควรหลีกเลี่ยงตรรกะแบบนี้ในมุมมองของคุณเพราะมันไม่ได้อยู่ที่นั่นจริงๆ
นอกจากนี้คุณควรใช้ViewModel
เพื่อรับค่าในมุมมองของคุณ (และอีกครั้งโดยใช้IHtmlString
เป็นประเภทคุณสมบัติ) การเห็นบางสิ่งบางอย่าง@Html.Encode(str)
เป็นเรื่องที่น่ากังวลเล็กน้อยเว้นแต่คุณจะทำสิ่งนี้เพียงเพื่อทำให้ตัวอย่างของคุณง่ายขึ้น
Html.Raw
จะช่วยได้