强制剃刀,以便始终输出html

时间:2012-02-23 09:30:12

标签: asp.net-mvc-3 razor override

我最好的猜测是覆盖System.Web.WebPages.WebPageBase写metod所以它返回WriteLiteral,但是我不能使用@model keywor我必须使用...在我做的网站上没有任何风险XSS攻击和我有几千个变量我需要在我的视图中显示包含html所以我不想为我写的每个变量写@ Html.Raw ... 这不是糟糕的设计:))

编辑:我自己拿到了 没关系,我压倒错误的方法......

namespace a
{
    public abstract class View<TModel> : System.Web.Mvc.WebViewPage<TModel>
    {
        public override void Write(Object value)
        {
            base.WriteLiteral(value);
        }
    }
}

并确保修改您的web.config INSIDE View文件夹,如下所示

<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="a.View">

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题。使用Views/web.config system.web.webPages.razor/pages[pageBaseType]进行设置。

public abstract class UnsafeWebViewPage<TModel> : WebViewPage<TModel>
{
    public override void Write(object value)
    {
        base.WriteLiteral(value);
    }
}

编辑:该死的,为时已晚:)