Ini tidak sepenuhnya benar. Ya, Anda dapat memasukkan string mentah tetapi jika Anda memiliki "'<>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
Daniel B. Chapman
4
Daniel, Html.Raw () "mengembalikan markup yang bukan HTML yang disandikan."
Ini TIDAK menyandikan tanda kutip. Selain dokumentasi yang jelas menyatakan itu polos sebagai hari ( "Metode ini membungkus HTML markup menggunakan kelas IHtmlString, yang membuat unencoded HTML." ) Saya juga diuji ini dan kutipan tidak dikodekan.
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.
<!--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:
Maka Anda memiliki ketenangan pikiran bahwa Anda belum membuat lubang keamanan potensial dan karakter khusus / asing ditampilkan dengan benar di semua browser.
+1 Persis apa yang saya butuhkan! String masih perlu disandikan tetapi pengembalian baris harus html. Terima kasih!
Peter
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))untuk ASP.NET Core
kenjiuno
5
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:
"'<>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"myAttr='hello';myInt=10"
sumber
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:
Untuk Core 1.0+ (dan MVC 5+) gunakan HtmlString
kemudian
sumber
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:Maka Anda memiliki ketenangan pikiran bahwa Anda belum membuat lubang keamanan potensial dan karakter khusus / asing ditampilkan dengan benar di semua browser.
sumber
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))
untuk ASP.NET CoreDalam 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:sumber
Anda juga dapat menggunakan metode WriteLiteral
sumber
HTML RAW:
sumber