现在,我正在尝试解决 IE6/7 的错误,该错误需要包装 </a> 带有此 IE 特定注释的结束标记以使某些下拉菜单起作用:

<!--[if IE 7]><!--></a><!--<![endif]-->

不幸的是,我无法将其直接注入到我的视图页面代码中,如下所示:

<%= Html.ActionLink("LinkName<!--[if IE 7]><!--></a><!--<![endif]-->","Action","Controller") %>

因为 Html.ActionLink 会做安全的事情并过滤掉评论以防止 Javascript 注入攻击。嗯不错。我对此很满意。好的设计决策。

我想做的是为此编写一个扩展方法,但这个过程让我困惑,因为我以前没有这样做过。

我认为这会起作用,但 Intellisense 似乎没有采用我编写的这个扩展方法。

public static class MyLinkExtensions
{
    public static string ActionLinkIE(this HtmlHelper htmlHelper,  
        string linkText, string actionName, string controllerName)
    {
        return LinkExtensions.ActionLink(htmlHelper, linkText, actionName, controllerName).
            Replace(@"</a>", @"<!--[if IE 7]><!--></a><!--<![endif]-->");
    }
}

有什么建议么?

编辑: 班级名称重要吗?(就我而言,我将其称为 MyLinkExtensions)

另外,当鼠标悬停在 <%= Html.ActionLink() %> 这似乎已经是一种扩展方法了。我可以扩展扩展方法吗?

有帮助吗?

解决方案

您可能需要把你的扩展命名空间在web.config中:

<pages>      
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Linq" />
        <add namespace="Pretzel.Extensions.Html" />
      </namespaces>
</pages>

这应该有助于智能感知。

其他提示

您可以根据 phil haack 的这篇文章更改编码输出的库http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx

这使您有机会使用 ANTiXss http://wpl.codeplex.com/. 。它是微软的一个库,具有:

  • JavaScript编码
  • 通过白名单进行编码

几乎所有使用 ajax 和 javascript 的应用程序都需要 JavascriptEncoding,所以我认为没有这个库就没有机会。

如果助手使用此库,您只需将标签添加到白名单即可。

编辑

我刚刚在页面上看到这对现有的 Html Helper 不起作用:-(。好吧,我一直保留这篇文章直到 MVC3。希望 AnTiXss 能够开箱即用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top