Jilet varsayılan olarak dizeyi kodlar. Kodlamadan oluşturma için özel bir sözdizimi var mı?
Jilet varsayılan olarak dizeyi kodlar. Kodlamadan oluşturma için özel bir sözdizimi var mı?
Yanıtlar:
ASP.NET MVC 3'ten bu yana şunları kullanabilirsiniz:
@Html.Raw(myString)
"myAttr='hello';myInt=10"
@(new HtmlString(myString))
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>
@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.
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))
ASP.NET Core için
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",..)
WriteLiteral yöntemini de kullanabilirsiniz
"'<>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