Razor mengkodekan string secara default. Apakah ada sintaks khusus untuk rendering tanpa pengkodean?
Razor mengkodekan string secara default. Apakah ada sintaks khusus untuk rendering tanpa pengkodean?
Jawaban:
Karena ASP.NET MVC 3, Anda dapat menggunakan:
@Html.Raw(myString)
"myAttr='hello';myInt=10"
@(new HtmlString(myString))
Serta pendekatan @ Html.Raw (string) yang telah disebutkan, jika Anda menampilkan MvcHtmlString, itu tidak akan dikodekan. Ini bisa bermanfaat saat menambahkan ekstensi Anda sendiri ke HtmlHelper, atau ketika mengembalikan nilai dari model tampilan Anda yang Anda tahu mungkin mengandung html.
Misalnya, jika model tampilan Anda adalah:
public class SampleViewModel
{
public string SampleString { get; set; }
public MvcHtmlString SampleHtmlString { get; set; }
}
Untuk Core 1.0+ (dan MVC 5+) gunakan HtmlString
public class SampleViewModel
{
public string SampleString { get; set; }
public HtmlString SampleHtmlString { get; set; }
}
kemudian
<!-- 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>
Gunakan @Html.Raw()
dengan hati-hati karena Anda dapat menyebabkan lebih banyak masalah dengan penyandian dan keamanan. Saya mengerti use case karena saya harus melakukan ini sendiri, tapi hati-hati ... Hanya menghindari semua teks yang masuk. Misalnya hanya menyimpan / mengonversi urutan karakter tertentu dan selalu menyandikan sisanya:
@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))
Maka Anda memiliki ketenangan pikiran bahwa Anda belum membuat lubang keamanan potensial dan karakter khusus / asing ditampilkan dengan benar di semua browser.
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))
untuk ASP.NET Core
Dalam kasus ActionLink, umumnya menggunakan HttpUtility.Encode pada teks tautan. Dalam hal ini Anda dapat menggunakannya
HttpUtility.HtmlDecode(myString)
bekerja untuk saya ketika menggunakan HtmlActionLink untuk memecahkan kode string yang ingin saya sampaikan. misalnya:
@Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)
Anda juga dapat menggunakan metode WriteLiteral
"'<>etc...
ini akan lolos. Cara yang benar adalah dengan menggunakan MvcHtmlString yang memungkinkan karakter "ilegal". Misalnya, jika Anda menyandikan data Json ... tanpa menyandi seluruh model