如何为整个Razor视图禁用HTML编码

gid*_*nma 8 c# razor asp.net-mvc-3

我们在典型的MVC流程之外使用Razor.我们的Razor视图是通过C#扩展从XSL转换中调用的.Razor视图的输出作为字符串返回到xsl变换.在某些情况下,我们将Razor视图的结果捕获到xsl变量中,然后将其传递回我们的模型,以作为另一个Razor视图中的数据使用.当发生这种情况时,我们最终得到第一个视图被双重编码,一次是Razor,第二次是通过xsl变换.我们需要能够在不对输出进行编码的情况下运行Razor.

这可能吗?我们该怎么做呢?

mar*_*ind 14

由于您希望在整个视图中禁用编码,因此最好的办法是创建自己继承的视图基类WebPageBase(然后您的视图应该用于@inherits指定新类型)并覆盖该Write(object value)方法以便调用它WriteLiteral().这样输出就不会被编码.


Red*_*dog 5

进一步上面答案你会这样做:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的视图中,您可以从以下开始:

@inherits MyNamespace.TextBasedViewPage<MyModelNamespace.Model>
Run Code Online (Sandbox Code Playgroud)