ASP.NET MVC Razor render tanpa pengkodean


Jawaban:


374

Karena ASP.NET MVC 3, Anda dapat menggunakan:

@Html.Raw(myString)

8
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."
Lucas

1
Html.Raw () menyandikan tanda kutip ..."myAttr='hello';myInt=10"
Serge

4
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.
James Wilkins


31

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>

10

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.


+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:

  @Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.