Normalmente in una vista ASP.NET si può usare la seguente funzione per ottenere un URL (non un <a>
):
Url.Action("Action", "Controller");
Tuttavia, non riesco a trovare come farlo da un helper HTML personalizzato. io ho
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
}
}
La variabile helper ha i metodi Action e GenerateLink, ma generano quelli <a>
. Ho fatto qualche ricerca nel codice sorgente ASP.NET MVC, ma non sono riuscito a trovare un modo semplice.
Il problema è che l'URL sopra è un membro della classe di visualizzazione e per la sua istanza ha bisogno di alcuni contesti e mappe di rotte (che non voglio trattare e che comunque non dovrei fare). In alternativa, l'istanza della classe HtmlHelper ha anche un certo contesto che presumo sia una cena del sottoinsieme delle informazioni di contesto dell'istanza Url (ma di nuovo non voglio occuparmene).
In sintesi, penso che sia possibile, ma dato che tutti i modi in cui ho potuto vedere, comportano una manipolazione con alcune cose ASP.NET più o meno interne, mi chiedo se ci sia un modo migliore.
Modifica: ad esempio, una possibilità che vedo sarebbe:
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
urlHelper.Action("Action", "Controller");
}
}
Ma non sembra giusto. Non voglio occuparmi delle istanze di UrlHelper da solo. Deve esserci un modo più semplice.