【问题标题】:Possible to write an Extension Method for ASP.NET's Html.ActionLink() method?可以为 ASP.NET 的 Html.ActionLink() 方法编写扩展方法吗?
【发布时间】:2010-06-16 18:27:57
【问题描述】:

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

<!--[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)

此外,当鼠标悬停在&lt;%= Html.ActionLink() %&gt; 上时,这似乎已经是一种扩展方法。我可以扩展扩展方法吗?

【问题讨论】:

  • 您是否尝试过构建应用程序?尽管知道代码没问题,但我遇到过代码被视为非法(或未出现在 Intellisense 中)的情况。
  • 是的,我已经尝试过构建它,但没有成功。

标签: asp.net-mvc extension-methods actionlink html.actionlink


【解决方案1】:

您可能需要将 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>

这应该有助于智能感知。

【讨论】:

  • 就是这样。如果没有你的帮助,我永远也不会明白这一点。谢谢!
  • 另外,您可以将您的扩展类放在与您正在扩展的类相同的命名空间中。例如,我将HtmlHelper 的扩展名放在System.Web.Mvc 中。这样,只要您引用该库,扩展方法就会被自动拾取。 (考虑到要扩展的类型,这也有点合乎逻辑。)
【解决方案2】:

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

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

  • Javascript 编码
  • 白名单编码

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

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

编辑

我刚刚在页面上看到现有的 Html Helper 无法使用 :-(。好吧,我将这篇文章保留到 MVC3。希望 AnTiXss 包含在内,然后开箱即用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-21
    • 2021-12-25
    • 2017-07-15
    • 1970-01-01
    • 2010-12-11
    • 2013-05-20
    • 1970-01-01
    • 2016-07-29
    相关资源
    最近更新 更多