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.