Dizeyi asp.net mvc görünümünde html olarak görüntüle


100

Html işaretlemeleri içeren dizge oluşturan bir denetleyicim var. Şimdi onu görünümlerde görüntülerken, tüm etiketleri içeren basit dizge olarak görüntüleniyor. Düzgün görüntülemek için kodlamak / kodunu çözmek için Html yardımcısını kullanmaya çalıştım, ancak çalışmıyor.

string str= "<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>";

Benim görüşlerime göre,

@Html.Encode(str)

6
Sanırım Html.Rawyardımcı olmalı.
Saeed Neamati

1
Ayrıca HtmlStrindersi de kullanabileceğinizi düşünüyorumHtmlString str = new HtmlString("<span>Some HTML here</span>");
Saeed Neamati

Yanıtlar:


172

Yakınsın kullanmak istiyorsun @Html.Raw(str)

@Html.Encodedizeleri alır ve tüm özel karakterlerin doğru şekilde işlenmesini sağlar. Bunlar boşluklar gibi karakterleri içerir.


6
@ Html.Raw tam olarak aradığım şey, cevabınız için teşekkürler :)
AFract

@Jerad Rose tarafından belirtildiği gibi IHtmlString çok daha iyi
Pratyush Dhanuka

38

Bunun IHtmlStringyerine kullanmalısınız:

IHtmlString str = new HtmlString("<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>");

HTML tutması gereken model özellikleriniz veya değişkenleriniz olduğunda, bunun genellikle daha iyi bir uygulama olduğunu düşünüyorum. Öncelikle biraz daha temiz. Örneğin:

@Html.Raw(str)

Nazaran:

@str

Ayrıca, @Html.Raw()verilerinizin HTML olup olmadığı endişesi denetleyicinizde tutulduğu için kullanmaktan biraz daha güvenli olduğunu düşünüyorum . Ön uç geliştiricilere karşı arka uç geliştiricilere sahip olduğunuz bir ortamda, arka uç geliştiricileriniz, hangi verilerin HTML değerlerini tutabileceğiyle daha uyumlu olabilir ve böylece bu endişeyi arka uçta (denetleyici) tutabilir.

Genelde Html.Raw()mümkün olduğunca kullanmaktan kaçınmaya çalışırım .

Kayda değer bir diğer şey de, nereye atadığınızdan emin değilim str, ancak bunu nasıl uygulayacağınızla ilgili beni ilgilendiren birkaç şey.

İlk olarak, bu, çözümünüzden ( IHtmlStringveya Html.Raw) bağımsız olarak bir kontrolörde yapılmalıdır . Gerçekten oraya ait olmadığı için, size göre böyle bir mantıktan kaçınmalısınız.

Ek olarak, ViewModeldeğerlerinizi görünümünüze almak için (ve yine ideal IHtmlStringolarak mülk türü olarak kullanmak) 'nizi kullanmalısınız . Bunu @Html.Encode(str)sadece örneğinizi basitleştirmek için yapmadığınız sürece, bunun gibi bir şey görmek biraz endişe vericidir.


1
Denetleyicilerin veri depolaması için değil yönlendirme için olduğunu belirtmek isterim. Ek olarak, arka uç geliştiricileriniz kodun mevcut sözleşmesini hiç değiştirmeyeceklerinden daha iyi bilmelidir. Kullanıcı arabirimi bir modele bağlı olmalıdır ve model bu kadar büyük ölçüde değişirse, birim testleriniz bozulmalıdır.
Anthony Mason

Cevabınız için teşekkürler. Bunu sevdim.
Thomas.Benz

Evet, bu cevap çok daha iyi, başlangıçta Html.Raw kullandım, ancak bu cevabı okuduğumda hemen değiştirdim
Pratyush Dhanuka,

7

kullanabilirsiniz @Html.Raw(str)

Daha fazlası için MSDN'ye bakın

HTML kodlu olmayan biçimlendirmeyi döndürür.

Bu yöntem, kodlanmamış HTML'yi oluşturan IHtmlString sınıfını kullanarak HTML biçimlendirmesini sarar.


1

MVC'deki HTML giriş alanlarında benzer bir sorun yaşadım. Sayfalandırılan web, yalnızca alanın ilk anahtar kelimesini gösterdi. Örnek: giriş alanı: "Hızlı kahverengi tilki" Görüntülenen değer: "The"

Çözüm, değişkeni aşağıdaki gibi değer ifadesinde tırnak içine koymaktı:

<input class="ParmInput" type="text" id="respondingRangerUnit" name="respondingRangerUnit"
       onchange="validateInteger(this.value)" value="@ViewBag.respondingRangerUnit">

0

Son zamanlarda benzer bir sorun yaşadım ve google beni buraya getirdi, bu yüzden bu cevabı buraya başkalarının da buraya gelmesi durumunda eksiksizlik için buraya koydum.

Ben ne zaman fark kötü html biçimlendirilmiş , aslında başlamıştı benim html etiketleri dışarı çıkardı ile, sadece sigara etiket içerik kalan . Özellikle açılış tablosu etiketinin eksik olduğu bir tablom vardı ve ardından tüm dizedeki tüm html etiketlerim tamamen koparıldı.

Yani, yukarıdakiler işe yaramazsa ve hala kafanızı kaşıyıyorsanız, html'inizin geçerli olup olmadığını da kontrol edin .

Çalışmaya başladıktan sonra bile, MVC'nin sahip olmadığım yerlere tbody etiketleri eklediğini fark ettim. Bu bana temizliğin gerçekleşmekte olduğunu (MVC 5) ve gerçekleşemediğinde tüm / bazı etiketleri çıkardığını söylüyor.

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.