2011-01-11 26 views
8

Jilet'i, tipik MVC akışının dışında kullanıyoruz. Razor görünümlerimiz bir C# uzantısı üzerinden bir XSL dönüşümünden çağrılır. Razor görünümünün çıkışı, bir dizge olarak xsl dönüştürmesine geri döndürülür. Bazı durumlarda, bir Razor görünümünün sonucunu bir xsl değişkenine aktarırız ve sonra bunu başka bir Razor görünümünde veri olarak tüketilmek üzere Modelimize geri göndeririz. Bu meydana geldiğinde, ilk bakışta çift kodlanmış, bir kez Razor tarafından, ikinci kez xsl dönüşümü ile sonuçlanırız. Çıkışı kodlamadan Razor'u çalıştırabilmeliyiz.Tüm Jilet görünümü için HTML Kodlaması nasıl devre dışı bırakılır

Bu mümkün mü? Bununla nasıl başlarız? Eğer tüm görünümde kodlamayı devre dışı bırakmak istediğiniz beri

+2

değil tam cevap, ancak kullanabilirsiniz @ (yeni Kodlamayı atlamak için HtmlString (Model.Something)) veya @ Html.Raw (Model.Something). – jhexp

+0

Teşekkürler. Görünümdeki mevcut kodlama özelliklerini kullanmanın rahatlığı. Bu durumda, görünüm motorunun çıktısını başka bir işleme döndürüyorum ve motorun tüm görünümde gerçekleştirdiği kodlamanın engellenmesi gerekiyor. Bu, sadece bazı kodlanmış verileri görünümde gömme meselesi değildir. Bunun standart bir uygulama olmadığını anlıyorum. Bizim durumumuzda, modernleştirmeye çalıştığımız geriye dönük uyumluluk kısıtlamalarına sahip eski bir sistemimiz var. Eğer başarılı olursa, bu şekilde Razor kullanmak bir veya iki yıl boyunca MVC'ye geçmemizi sağlayacaktır. Yine de giriş için teşekkürler. – gidmanma

cevap

14

, en iyi bahis kendi bakış taban sınıfı WebPageBase devralan (ve sonra görüşleriniz yeni türünü belirtmek için @inherits kullanmalıdır) oluşturmak olacaktır ve böylece Write(object value) yöntemini geçersiz olur Bunun yerine WriteLiteral() çağırır. Bu şekilde çıktı kodlanmayacak.

+0

Teşekkürler marcind - İçinde bulunduğunuzu umuyordum. – gidmanma

5

Daha answer above bunu gibi bunu başarmak olacaktır:

public abstract class TextBasedViewPage : System.Web.Mvc.WebViewPage 
{ 
    public override void Write(object value) 
    { 
     WriteLiteral(value); 
    } 
} 

public abstract class TextBasedViewPage<TModel> : System.Web.Mvc.WebViewPage<TModel> 
{ 
    public override void Write(object value) 
    { 
     WriteLiteral(value); 
    } 
} 

Sonra görünümünde birlikte olduğun başlatabilirsiniz:

@inherits MyNamespace.TextBasedViewPage<MyModelNamespace.Model> 
İlgili konular