Обычно в представлении ASP.NET можно использовать следующую функцию для получения URL (не <a>
):
Url.Action("Action", "Controller");
Тем не менее, я не могу найти, как это сделать с помощью специального помощника HTML. у меня есть
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
}
}
Вспомогательная переменная имеет методы Action и GenerateLink, но они генерируют <a>
. Я немного покопался в исходном коде ASP.NET MVC, но не смог найти прямой путь.
Проблема заключается в том, что указанный выше URL-адрес является членом класса представления, и для его реализации ему нужны некоторые контексты и карты маршрутов (с которыми я не хочу иметь дело, и в любом случае я не должен). В качестве альтернативы, экземпляр класса HtmlHelper также имеет некоторый контекст, который, как я предполагаю, является либо ужином подмножества контекстной информации экземпляра Url (но, опять же, я не хочу иметь с этим дело).
Подводя итог, я думаю, что это возможно, но так как все способы, которые я мог видеть, включая некоторые манипуляции с некоторыми более или менее внутренними вещами ASP.NET, я задаюсь вопросом, есть ли лучший способ.
Редактировать: Например, я вижу одну возможность:
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
urlHelper.Action("Action", "Controller");
}
}
Но это не кажется правильным. Я не хочу иметь дело с примерами UrlHelper сам. Должен быть более простой способ.
источник
Ответы:
Вы можете создать url helper следующим образом в методе расширения html helper:
источник
new UrlHelper(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection)
Вы также можете получить ссылки, используя
UrlHelper
public и static класс:В этом примере вам не нужно создавать новый класс UrlHelper, что может быть небольшим преимуществом.
источник
Вот мой крошечный метод extenstion для получения
UrlHelper
изHtmlHelper
экземпляра:Используйте это как:
(Я публикую этот ответ только для справки)
источник