可以为ASP.NET的Html.ActionLink()方法编写扩展方法吗?

Pre*_*zel 3 asp.net-mvc extension-methods actionlink html.actionlink

现在,我正在尝试解决一个IE6/7错误,该错误要求</a>使用此特定于IE的注释包含结束标记,以使某些下拉菜单工作:

<!--[if IE 7]><!--></a><!--<![endif]-->
Run Code Online (Sandbox Code Playgroud)

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

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

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

有什么建议?

编辑:班级名称是否重要?(就我而言,我称之为MyLinkExtensions)

此外,鼠标悬停在<%= Html.ActionLink() %>那里似乎已经是一个扩展方法.我可以扩展扩展方法吗?

Mat*_*man 6

您可能需要将您的Extensions命名空间放在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>
Run Code Online (Sandbox Code Playgroud)

这应该有助于Intellisense.