2010-11-25 21 views
377

Bir DB tablosunda güvenli/sterilize edilmiş HTML'im var.HTML dizgilerini yazma/çıkarma unescaped

Bu HTML içeriğini bir Razor görünümünde nasıl yazabilirim?

< ve ampersands gibi karakterleri her zaman &amp;'a kaçar.

+62

yılında

@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)") 

Sonuçlar aşağıda insanlara tartışma uzun bir geçmişe kaydetmek için - '@ Html.Raw()' –

+0

benim gibi insanlar dinamik yazılan anonim türleri ile birlikte bu yapmaya çalışıyor kaydetmek için Bu işlemin işe yaramayacağı yerler, daha spesifik sorularıma [bu yanıtı] (http://stackoverflow.com/a/31306368/957950) bakın. Durumunuz izin veriyorsa, bu yaklaşımın güçlü bir şekilde yazılmış bir görünümle kullanılması hala daha iyidir. – brichins

cevap

571

içeriğinizi farz mystring adında bir dize içinde olduğunu ...

Sen kullanabilirsiniz:

@Html.Raw(mystring) 

Alternatif HtmlString veya doğrudan modeli veya içinde IHtmlString uygulayan başka türüyle dize dönüştürebilirsiniz Satır içi kullanın ve düzenli olarak kullanın. @:

@{ var myHtmlString = new HtmlString(mystring);} 
@myHtmlString 
+0

Bu cevap için teşekkürler. Öğrenmekte olduğum küçük bir görevi bitirmeme yardım ettim. :) Ancak MVC3'ün en son sürümünü kullanıyorum ve şu ana kadar hiçbir Html.Raw :( –

+1

Merhaba Sergio. MVC 3 kullanıyorum ve Raw yöntemini doğru kullanıyorum. –

+1

Cevabınız için teşekkür ederim! ' hala MVC 3'ü öğreniyorum ve bu beni utandırdı –

70

ASP.NET MVC 3'te Böyle bir şey: Dommer önerdiği gibi @MvcHtmlString.Create(ViewBag.Stuff) kullanmaktan dışında

// Say you have a bit of HTML like this in your controller: 
ViewBag.Stuff = "<li>Menu</li>" 
// Then you can do this in your view: 
@MvcHtmlString.Create(ViewBag.Stuff) 
+13

ben bu yöntemi tercih ediyorum. – 37Stars

+1

Teşekkürler, bu çok temiz! – Hajjat

49

Sen böyle denetleyicisi ViewData içine dize koyabilirsiniz

@{ WriteLiteral("html string"); } 
+4

1 WriteLiteral için, bir –

+4

Bu, benim için harika oldu e-postalar göndermek için bir Hangfire uygulaması içinde Razor kullanılarak olduğunu bilmiyordum ... 'Html.Raw()' WriteLiteral orada – shanabus

+0

1 çalışmıyor –

4

kullanabilirsiniz Bazen ham html kullanmak zor olabilir. Çoğunlukla XSS güvenlik açığı nedeniyle. Bu bir endişe, ancak hala ham html kullanmak istiyorsanız, korkutucu parçaları kodlayabilirsiniz.

(<b>&lt;script&gt;console.log('insert')&lt;/script&gt;Hello</b>) 
8