Можно написать метод расширения для метода Html.ActionLink () в ASP.NET? - PullRequest
3 голосов
/ 16 июня 2010

Сейчас я пытаюсь обойти ошибку 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() %> это, по-видимому, уже метод расширения. Могу ли я расширить метод расширения?

Ответы [ 2 ]

6 голосов
/ 16 июня 2010

Возможно, вам нужно поместить пространство имен расширений в 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>

Это должно помочь Intellisense.

0 голосов
/ 16 июня 2010

Вы можете изменить библиотеку для кодирования вывода в соответствии с этим сообщением от Фила Хаака http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx

Это дает вам возможность использовать ANtiXss http://wpl.codeplex.com/. Это библиотека от Microsoft, которая имеет:

  • JavascriptEncoding
  • Кодирование с помощью белого списка

Практически любому приложению, использующему ajax и javascript, в любом случае потребуется JavascriptEncoding, поэтому я думаю, что у меня нет шансов пойтибез этой библиотеки.

Если помощник использует эту библиотеку, вам нужно всего лишь добавить свой тег в белый список, и вы готовы к работе.

РЕДАКТИРОВАТЬ

Я простоувидел на странице, что это не работает с существующим Html Helper :-(. Ну, я держу этот пост до MVC3. Надеюсь, AnTiXss будет включен из коробки.

...