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.
quelle
Antworten:
Sie können einen URL-Helfer wie diesen in der HTML-Helfer-Erweiterungsmethode erstellen:
quelle
new UrlHelper(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection)
Sie können Links auch mit
UrlHelper
öffentlichen und statischen Klassen abrufen:In diesem Beispiel müssen Sie keine neue UrlHelper-Klasse erstellen, was ein kleiner Vorteil sein könnte.
quelle
Hier ist meine winzige Erweiterungsmethode zum Abrufen
UrlHelper
einerHtmlHelper
Instanz:Verwenden Sie es als:
(Ich poste diese Ans nur als Referenz)
quelle