2011-01-11 4 views
8

Nous utilisons Razor en dehors du flux MVC typique. Nos vues Razor sont appelées depuis une transformation XSL via une extension C#. La sortie de la vue Razor est renvoyée à la transformation xsl en tant que chaîne. Dans certains cas, nous capturons le résultat d'une vue Razor dans une variable xsl, puis la transmettons à notre modèle pour être consommés en tant que données dans une autre vue Razor. Lorsque cela se produit, la première vue est codée en double, une fois par Razor, la seconde par la transformation xsl. Nous devons être en mesure de lancer Razor sans avoir à encoder la sortie.Comment désactiver le codage HTML pour une vue Razor entière

Est-ce possible? Comment ferions-nous cela?

+2

pas la réponse complète, mais vous pouvez utiliser @ (nouveau HtmlString (Model.Something)) ou @ Html.Raw (Model.Something) pour contourner l'encodage. – jhexp

+0

Merci. Je suis à l'aise avec l'utilisation des fonctions d'encodage disponibles dans la vue. Dans ce cas, je renvoie la sortie du moteur de vue à un autre processus et je dois empêcher l'encodage effectué par le moteur sur l'ensemble de la vue. Il ne s'agit pas seulement d'incorporer des données codées dans la vue. Je comprends que ce n'est pas une implémentation standard. Dans notre cas, nous avons un système hérité avec beaucoup de contraintes de rétrocompatibilité que nous essayons de moderniser. En cas de succès, utiliser Razor de cette façon nous permettra de migrer vers MVC pendant un an ou deux. Merci pour la contribution si. – gidmanma

Répondre

14

Puisque vous souhaitez désactiver le codage dans votre vue entière, votre meilleur pari serait de créer votre propre classe de base de vue héritant de WebPageBase (et votre point de vue doit utiliser @inherits pour indiquer votre nouveau type) et remplacer la méthode Write(object value) si qu'il appelle WriteLiteral() à la place. De cette façon, la sortie ne sera pas encodée.

+0

Merci marcind - j'espérais que vous alliez entrer. Je vais essayer. – gidmanma

5

En outre, le l'answer above vous atteindre cet objectif comme ceci:

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

Alors, selon vous, vous pouvez commencer avec:

@inherits MyNamespace.TextBasedViewPage<MyModelNamespace.Model> 
Questions connexes