Pertanyaan Memancarkan string yang tidak dienkode dalam tampilan Razor


Seperti kata ScottGu dalam blognya pos «Oleh konten default yang dipancarkan menggunakan blok @ secara otomatis dikodekan HTML untuk perlindungan yang lebih baik terhadap skenario serangan XSS». Pertanyaan saya adalah: bagaimana Anda bisa mengeluarkan string non-HTML-encoded?

Demi kesederhanaan, harap tetap berpegang pada kasus sederhana ini:

@{
 var html = "<a href='#'>Click me</a>"
 // I want to emit the previous string as pure HTML code...
}

76
2017-07-28 19:41


asal


Jawaban:


Ini adalah pendekatan favorit saya:

@Html.Raw("<p>my paragraph text</p>")

Sumber adalah referensi sintaks Razor Phil Haack: http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx


107
2018-02-07 22:47



Anda dapat membuat contoh baru MvcHtmlString yang tidak akan mendapatkan kode HTML.

@{
  var html = MvcHtmlString.Create("<a href='#'>Click me</a>")
}

Semoga akan ada cara yang lebih mudah di masa depan Razor.

Jika Anda tidak menggunakan MVC, Anda dapat mencoba ini:

@{
  var html = new HtmlString("<a href='#'>Click me</a>")
}

17
2017-07-28 20:46



HtmlString baru jelas merupakan jawabannya.

Kami melihat beberapa perubahan sintaks lainnya, tetapi akhirnya tidak ada yang benar-benar menjadi lebih pendek dari HtmlString baru.

Kami mungkin, bagaimanapun, membungkus itu menjadi pembantu. Mungkin...

@Html.Literal("<p>something</p>")

atau

@"<p>something</p>".AsHtml()

6
2017-07-29 01:15



Saya mengalami masalah ini juga ketika mengalihkan proyek kami ke mesin tampilan Razor baru. Pendekatan yang saya ambil sedikit berbeda karena kami harus menghasilkan data JSON dari C # dan ingin menampilkannya pada pemuatan halaman.

Apa yang akhirnya saya lakukan adalah menerapkan RawView yang merupakan paralel dari Lihat di dalam file cshtml. Pada dasarnya, untuk mendapatkan untaian mentah,

@(new HtmlString(View.Foo))

// became
@RawView.Foo

Ini membutuhkan beberapa perubahan pada tata letak proyek, jadi saya baru saja menulis posting blog tentang itu sini. Singkatnya, ini membutuhkan implementasi duplikat DynamicViewDataDictionary MVC dan WebViewPage baru yang berisi RawView. Saya juga pergi ke depan dan mengimplementasikan operator indeks pada RawView untuk memungkinkan

@RawView["Foo"]

Jika seseorang ingin mengulang data dengan daftar kunci.

Membaca komentar anurse, mungkin akan lebih baik jika saya menamai ini sebagai Literal, bukan RawView.


0
2017-08-18 22:21