2011-01-11 12 views
8

Używamy maszynki Razor poza typowym przepływem MVC. Nasze widoki Razor są wywoływane z poziomu transformacji XSL przez rozszerzenie C#. Dane wyjściowe widoku Razor są zwracane do transformacji xsl jako ciąg znaków. W niektórych przypadkach przechwytywamy wynik widoku Żyletka na zmienną xsl, a następnie przekazujemy ją do naszego Modelu, aby została wykorzystana jako dane w innym widoku maszynki Razor. Kiedy tak się stanie, kończymy z pierwszym widokiem, który jest podwójnie zakodowany, raz przez Razor, po raz drugi poprzez transformację xsl. Musimy być w stanie uruchomić maszynę Razor bez zakodowania wyjścia.Jak wyłączyć kodowanie HTML dla całego widoku Razor

Czy to możliwe? Jak byśmy to zrobili?

+2

nie caly odpowiedzi, ale można użyć @ (nowa HtmlString (Model.Something)) lub @ Html.Raw (Model.Something) w celu ominięcia kodowania. – jhexp

+0

Dzięki. Jestem wygodny w użyciu funkcji kodowania dostępnych w widoku. W tym przypadku zwracam dane wyjściowe mechanizmu wyświetlania do innego procesu i trzeba zapobiec kodowaniu wykonywanemu przez silnik w całym widoku. To nie tylko kwestia osadzenia w widoku niektórych zakodowanych danych. Rozumiem, że nie jest to standardowa implementacja. W naszym przypadku mamy stary system z wieloma ograniczeniami kompatybilności wstecznej, które staramy się modernizować. Jeśli się powiedzie, użycie Razor w ten sposób pozwoli nam na migrację do MVC przez rok lub dwa. W każdym razie dziękuję za wkład. – gidmanma

Odpowiedz

14

Skoro chcesz wyłączyć kodowanie w całej zdaniem, najlepiej byłoby, aby utworzyć własną klasę widok baza dziedziczenie z WebPageBase (i wtedy twoje poglądy powinny stosować @inherits aby określić nowy typ) i zastąpić metodę Write(object value) tak zamiast tego wywołuje WriteLiteral(). W ten sposób dane wyjściowe nie będą kodowane.

+0

Dzięki Marcind - miałem nadzieję, że zadzwonisz. Odpalę. – gidmanma

5

Dalsze The answer above chcesz osiągnąć tak:

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); 
    } 
} 

Następnie w widoku można rozpocząć się:

@inherits MyNamespace.TextBasedViewPage<MyModelNamespace.Model> 
Powiązane problemy