มีดโกนเข้ารหัสสตริงตามค่าเริ่มต้น มีไวยากรณ์พิเศษสำหรับการแสดงผลโดยไม่ต้องเข้ารหัสหรือไม่
มีดโกนเข้ารหัสสตริงตามค่าเริ่มต้น มีไวยากรณ์พิเศษสำหรับการแสดงผลโดยไม่ต้องเข้ารหัสหรือไม่
คำตอบ:
ตั้งแต่ ASP.NET MVC 3 คุณสามารถใช้:
@Html.Raw(myString)
"myAttr='hello';myInt=10"
@(new HtmlString(myString))
เช่นเดียวกับวิธีการ @ Html.Raw (สตริง) ที่กล่าวถึงแล้วหากคุณส่งออก MvcHtmlString มันจะไม่ถูกเข้ารหัส สิ่งนี้มีประโยชน์เมื่อเพิ่มส่วนขยายของคุณเองใน HtmlHelper หรือเมื่อคืนค่าจากมุมมองโมเดลที่คุณรู้ว่าอาจมี html
ตัวอย่างเช่นหากโมเดลการดูของคุณคือ:
public class SampleViewModel
{
public string SampleString { get; set; }
public MvcHtmlString SampleHtmlString { get; set; }
}
สำหรับ Core 1.0+ (และ MVC 5+) ให้ใช้ HtmlString
public class SampleViewModel
{
public string SampleString { get; set; }
public HtmlString SampleHtmlString { get; set; }
}
แล้วก็
<!-- this will be encoded -->
<div>@Model.SampleString</div>
<!-- this will not be encoded -->
<div>@Html.Raw(Model.SampleString)</div>
<!-- this will not be encoded either -->
<div>@Model.SampleHtmlString</div>
ใช้@Html.Raw()
ด้วยความระมัดระวังเนื่องจากอาจทำให้เกิดปัญหากับการเข้ารหัสและความปลอดภัย ฉันเข้าใจกรณีการใช้งานเพราะฉันต้องทำสิ่งนี้ด้วยตัวเอง แต่อย่างระมัดระวัง ... เพียงหลีกเลี่ยงการปล่อยให้ข้อความทั้งหมดผ่านไป ตัวอย่างเช่นสงวน / แปลงลำดับอักขระเฉพาะและเข้ารหัสส่วนที่เหลือ:
@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))
จากนั้นคุณวางใจได้ว่าคุณยังไม่ได้สร้างช่องโหว่ความปลอดภัยและอักขระพิเศษ / ต่างประเทศจะแสดงอย่างถูกต้องในเบราว์เซอร์ทั้งหมด
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))
สำหรับ ASP.NET Core
ในกรณีของ ActionLink มักใช้ HttpUtility.Encode ในข้อความลิงค์ ในกรณีนี้คุณสามารถใช้งาน
HttpUtility.HtmlDecode(myString)
ได้กับฉันเมื่อใช้ HtmlActionLink เพื่อถอดรหัสสตริงที่ฉันต้องการส่ง เช่น:
@Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)
คุณยังสามารถใช้เมธอด WriteLiteral
RAW HTML:
@Html.Raw(yourString)
"'<>etc...
สิ่งเหล่านี้จะถูกหลบหนี วิธีที่ถูกต้องคือการใช้ MvcHtmlString ซึ่งจะทำให้ตัวอักษร "ผิดกฎหมาย" ตัวอย่างเช่นหากคุณกำลังเข้ารหัสข้อมูล Json ... โดยไม่ต้องเข้ารหัสทั้งรุ่น