Normalmente, em uma exibição do ASP.NET, pode-se usar a seguinte função para obter um URL (não um <a>
):
Url.Action("Action", "Controller");
No entanto, não consigo encontrar como fazê-lo em um auxiliar de HTML personalizado. eu tenho
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
}
}
A variável auxiliar possui os métodos Action e GenerateLink, mas eles geram <a>
's. Eu pesquisei no código-fonte do ASP.NET MVC, mas não consegui encontrar uma maneira direta.
O problema é que o URL acima é um membro da classe view e, por sua instanciação, precisa de alguns contextos e mapas de rotas (com os quais não quero lidar e que não devo). Como alternativa, a instância da classe HtmlHelper também possui algum contexto que, suponho, é a ceia do subconjunto das informações de contexto da instância Url (mas, novamente, não quero lidar com isso).
Em resumo, acho que é possível, mas como todas as formas que pude ver envolvem alguma manipulação com algumas coisas mais ou menos internas do ASP.NET, pergunto-me se existe uma maneira melhor.
Edit: Por exemplo, uma possibilidade que vejo seria:
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
urlHelper.Action("Action", "Controller");
}
}
Mas isso não parece certo. Não quero lidar com instâncias do UrlHelper. Deve haver uma maneira mais fácil.
fonte
Respostas:
Você pode criar um auxiliar de URL como este dentro do método de extensão de auxiliar html:
fonte
new UrlHelper(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection)
Você também pode obter links usando
UrlHelper
a classe pública e estática:Neste exemplo, você não precisa criar uma nova classe UrlHelper, o que poderia ser uma pequena vantagem.
fonte
Aqui está o meu pequeno método de extensão para obter
UrlHelper
umaHtmlHelper
instância:Use-o como:
(Estou postando este ans apenas para referência)
fonte