2010-07-27 15 views
9

Şu anda kullanıcıların içerik eklemelerine izin vermek için ASP.NET'te küçük bir şablon sistemi yazıyorum. Örneğin, kullanıcı dizgiyi girebilir (değişken tipi dizedir).ASP.NET Razor'da dizeleri biçimlendirme

topHeader[x] = "They think it's all over. It is now!"; 

Ancak ihtiyaç duyulan bir değişiklik bu içerikte bazı temel HTML etiketleri eklemek için yeteneğidir, bu nedenle eklerseniz aşağıdaki

topHeader[x] = "They think it's all over. <strong>It is now!</strong>"; 

veya

topHeader[x] = "They think it's all over. <a title="Football News" href="URL">It is now!</a>"; 

yapılabilir Bu tür şeyler dizeleri şimdi HTML olarak biçimlendirilmiyorlar, ama bir şekilde onları istedikleri gibi almak istiyorum. Doğal olarak cevabı almak için internete baktım, ama Razor'un oldukça yeni olduğu için dışarıda bana yardımcı olacak çok fazla şey yok.

Bunun nasıl yapıldığına dair bir fikri olan var mı?

cevap

9

HTML kaynağınızı tutarak bir IHtmlString uygulama oluşturmanız gerekir.

Razor sizin için bunu yapmanın bir yardımcı yöntemini kullanmayı planlıyor, ancak AFAIK, henüz değil, bu yüzden arayüzü uygulayan ve HTML'nizi döndüren kendi sınıfınızı oluşturmanız gerektiğine inanıyorum. GetHtmlString() yöntemi.
EDIT: HtmlString sınıfını kullanabilirsiniz.

Sen IHtmlString s yerine String s tutmak için topHeader sözlüğü değiştirebilir veya takvimi olduğu gibi kodunuzu bırakabilirsiniz, ama Jilet görünümünde bir HtmlString sarın:

<tag>@new HtmlString(topHeader[x])</tag> 

emin olun HTML olmayan özel karakterlerden doğru şekilde kaçmak.

4

SLaks doğru, ancak IHtmlString kendi uygulamanızı yazmanıza gerek yok, HtmlString adı verilen System.Web için yerleşik bir tane var. Böylece: İşe yarar.

+0

ama "CS0029: örtük 'string' bir tip 'System.Web.HtmlString' dönüştürülemez" almak ne yapıyorum üzerinde herhangi bir fikir yanlış? –

+1

@EnderMB: Söz dizimini 'IHtmlString' veya' object' içerecek şekilde değiştirin. – SLaks

9

Ekledikleri yardımcı yöntem Html.Raw() olarak adlandırılır ve çok daha temiz. İşte

bir örnek: Bu denedim

@Html.Raw("Hello <a>World</a>!") 
+0

Bu bir çekicilik gibi çalıştı! Ve verilen diğer cevaplardan daha kolay. – sksallaj