Normalement, dans une vue ASP.NET, on peut utiliser la fonction suivante pour obtenir une URL (pas une <a>
):
Url.Action("Action", "Controller");
Cependant, je ne trouve pas comment le faire à partir d'un assistant HTML personnalisé. j'ai
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
}
}
La variable d'assistance a les méthodes Action et GenerateLink, mais elles génèrent <a>
des. J'ai fait quelques recherches dans le code source ASP.NET MVC, mais je n'ai pas pu trouver de moyen simple.
Le problème est que l'URL ci-dessus est membre de la classe de vue et que pour son instanciation, elle a besoin de contextes et de cartes de route (dont je ne veux pas parler et que je ne suis pas censé de toute façon). Alternativement, l'instance de la classe HtmlHelper a également un contexte qui, je suppose, est soit un sous-ensemble des informations de contexte de l'instance Url (mais encore une fois, je ne veux pas m'en occuper).
En résumé, je pense que c'est possible, mais puisque toutes les façons dont je pouvais voir, impliquent une manipulation avec des trucs ASP.NET plus ou moins internes, je me demande s'il existe une meilleure façon.
Edit: Par exemple, une possibilité que je vois serait:
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
urlHelper.Action("Action", "Controller");
}
}
Mais cela ne semble pas juste. Je ne veux pas traiter moi-même d'instances d'UrlHelper. Il doit y avoir un moyen plus simple.