HTML dizelerini kaçınılmaz olarak yazma / çıktılama


436

Bir DB tablosuna kaydedilmiş güvenli / sterilize edilmiş HTML var.

Bu HTML içeriğini bir Jilet görünümünde nasıl yazdırabilirim?

Her zaman gibi karakterlerden kaçar <ve ve işareti alır &amp;.


76
İnsanları kurtarmak için aşağıdaki uzun tartışma geçmişi -@Html.Raw()
Chris S

Benim gibi insanları, dinamik olarak yazılan görünümlerde anonim türlerle yapmaya çalışırken, bunun işe yaramayacağı yerde kaydetmek için - daha spesifik sorumun bu cevabına bakın . Durumunuzu izin veriyorsa, bu yaklaşımı güçlü bir görünümle kullanmak yine de daha iyidir.
brichins

Yanıtlar:


653

Diyelim ki içeriğiniz adlı bir dizenin içindedir mystring...

Kullanabilirsiniz:

@Html.Raw(mystring)

Alternatif olarak, dizenizi HtmlStringveya IHtmlStringmodelde veya doğrudan satır içi olarak uygulanan herhangi bir türe dönüştürebilir ve düzenli olarak kullanabilirsiniz @:

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

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

1
Merhaba Sergio. MVC 3 kullanıyorum ve düzgün Raw yöntemini kullanıyorum.
Gui

1
Cevap için teşekkür ederim! Hala MVC 3 öğreniyorum ve bu beni kaçırıyordu.
Todd Richardson

3
@Lorenzo, +1 Ben razorsözdizimi ile en son MVC 3 kullanıyorum ve Html.Rawkesinlikle benim için kullanılabilir.
Chris Snowden

1
Lorenzo, MVC Beta'dan bahsetmek için birkaç yıl önceki cevabı güncelledim. Geri dönmek / değiştirmek için çekinmeyin.
Alexei Levenkov

75

ASP.NET MVC 3'te şöyle bir şey yapmalısınız:

// 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 geçilen dize null ise HTML.Raw patlar çünkü bu yöntemi tercih.
37Stars

1
Teşekkürler, bu çok temiz!
Hacat

64

Kullanabilirsiniz

@{ WriteLiteral("html string"); }

5
Bu benim için harikaydı, e-posta göndermek için bir Hangfire uygulaması içinde Razor kullanıyordu ... Html.Raw()orada çalışmıyor
shanabus

WriteLiteral
muhammed basil

11

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

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

Sonuçları

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

4

Dizenizi aşağıdaki gibi denetleyicide viewdata'ya koyabilirsiniz:

 ViewData["string"] = DBstring;

Ve sonra bu görünüm verilerini şu şekilde görün:

@Html.Raw(ViewData["string"].ToString())


0

RazorEngine'de şablon işlevlerini kullanmak için tam örnek (örneğin, e-posta üretimi için):

@model SomeModel
@{
    Func<PropertyChangeInfo, object> PropInfo =
        @<tr class="property">
            <td>
                @item.PropertyName                
            </td>
            <td class="value">
                <small class="old">@item.OldValue</small>
                <small class="new">@item.CurrentValue</small>                
            </td>
        </tr>;
}

<body>

@{ WriteLiteral(PropInfo(new PropertyChangeInfo("p1", @Model.Id, 2)).ToString()); }

</body>
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.