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.
la source
Réponses:
Vous pouvez créer un helper url comme ceci dans la méthode d'extension d'assistance html:
la source
new UrlHelper(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection)
Vous pouvez également obtenir des liens en utilisant
UrlHelper
la classe publique et statique:Dans cet exemple, vous n'avez pas besoin de créer une nouvelle classe UrlHelper, ce qui pourrait être un petit avantage.
la source
Voici ma petite méthode d'extension pour obtenir
UrlHelper
uneHtmlHelper
instance:Utilisez-le comme:
(Je poste cet article pour référence seulement)
la source