ASP.NET MVC Jilet kodlama olmadan render


Yanıtlar:


374

ASP.NET MVC 3'ten bu yana şunları kullanabilirsiniz:

@Html.Raw(myString)

8
Bu tamamen doğru değil. Evet, ham bir dize ekleyebilirsiniz, ancak "'<>etc...bunlara sahipseniz kaçacaktır. Doğru yol, "geçersiz" karakterlere izin verecek olan MvcHtmlString kullanmaktır. Örneğin, Json verilerini kodluyorsanız ... tüm bir modeli kodlamadan
Daniel B. Chapman

4
Daniel, Html.Raw () "HTML kodlu olmayan biçimlendirmeyi döndürür."
Lucas

1
Html.Raw () tırnak işaretler ..."myAttr='hello';myInt=10"
Serge

4
Tırnakları kodlamaz. Gün olarak düz belirten açık belgelerin yanı sıra ( "Bu yöntem, kodlanmamış HTML oluşturan IHtmlString sınıfını kullanarak HTML işaretlemesini sarar ." ) Bunu da test ettim ve tırnaklar kodlanmadı.
James Wilkins


31

Zaten bahsedilen @ Html.Raw (string) yaklaşımının yanı sıra, bir MvcHtmlString çıktısıyla kodlanmaz. Bu, kendi uzantılarınızı HtmlHelper'a eklerken veya görünüm modelinizden html içerebileceğini bildiğiniz bir değer döndürürken faydalı olabilir.

Örneğin, görünüm modeliniz:

public class SampleViewModel
{
  public string SampleString { get; set; }
  public MvcHtmlString SampleHtmlString { get; set; }
}

Core 1.0+ (ve MVC 5+) için HtmlString kullanın

public class SampleViewModel
{
  public string SampleString { get; set; }
  public HtmlString SampleHtmlString { get; set; }
}

sonra

<!-- 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

@Html.Raw()Kodlama ve güvenlikle ilgili daha fazla soruna neden olabileceğiniz için dikkatli kullanın . Kullanım durumunu kendim yapmak zorunda olduğumu anlıyorum, ama dikkatlice ... Sadece tüm metne izin vermekten kaçının. Örneğin, yalnızca belirli karakter dizilerini korur / dönüştürür ve her zaman kalanını kodlar:

@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))

O zaman potansiyel bir güvenlik açığı oluşturmadığınızdan emin olabilirsiniz ve tüm tarayıcılarda özel / yabancı karakterler doğru şekilde görüntülenir.


+1 Tam olarak ihtiyacım olan şey! Dizenin hala kodlanması gerekiyor, ancak satır döndürmelerinin html olması gerekiyor. Teşekkürler!
Peter

@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))ASP.NET Core için
kenjiuno

5

ActionLink durumunda, bağlantı metninde genellikle HttpUtility.Encode kullanılır. Bu durumda HttpUtility.HtmlDecode(myString) HtmlActionLink'i kullanmak istediğim dizginin kodunu çözmek için benim için çalıştı. Örneğin:

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



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.