Normalerweise kann man in einer ASP.NET-Ansicht die folgende Funktion verwenden, um eine URL (keine <a>
) zu erhalten:
Url.Action("Action", "Controller");
Ich kann jedoch nicht herausfinden, wie es mit einem benutzerdefinierten HTML-Helfer geht. ich habe
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
}
}
Die Hilfsvariable verfügt über die Methoden Action und GenerateLink, generiert jedoch die Methoden <a>
. Ich habe im ASP.NET MVC-Quellcode etwas gegraben, konnte aber keinen einfachen Weg finden.
Das Problem ist, dass die obige URL ein Mitglied der Ansichtsklasse ist und für ihre Instanziierung einige Kontexte und Routenkarten benötigt (mit denen ich mich nicht befassen möchte und die ich sowieso nicht tun soll). Alternativ hat die Instanz der HtmlHelper-Klasse auch einen Kontext, von dem ich annehme, dass er entweder eine Teilmenge der Kontextinformationen der Url-Instanz enthält (aber ich möchte mich auch hier nicht damit befassen).
Zusammenfassend denke ich, dass es möglich ist, aber da alle Möglichkeiten, die ich sehen konnte, einige Manipulationen mit mehr oder weniger internen ASP.NET-Dingen beinhalten, frage ich mich, ob es einen besseren Weg gibt.
Bearbeiten: Eine Möglichkeit, die ich sehe, wäre zum Beispiel:
public class MyCustomHelper
{
public static string ExtensionMethod(this HtmlHelper helper)
{
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
urlHelper.Action("Action", "Controller");
}
}
Aber es scheint nicht richtig. Ich möchte mich nicht selbst mit Instanzen von UrlHelper befassen. Es muss einen einfacheren Weg geben.