Ich muss einige URLs in einem Modell in ASP.NET MVC generieren. Ich möchte so etwas wie UrlHelper.Action () aufrufen, das die Routen zum Generieren der URL verwendet. Es macht mir nichts aus, die üblichen Lücken wie den Hostnamen, das Schema usw. zu füllen.
Gibt es eine Methode, die ich dafür aufrufen kann? Gibt es eine Möglichkeit, einen UrlHelper zu erstellen?
asp.net-mvc
urlhelper
pupeno
quelle
quelle
Antworten:
Hilfreicher Tipp: In jeder ASP.NET-Anwendung können Sie eine Referenz des aktuellen HttpContext abrufen
welches von System.Web abgeleitet ist. Daher funktioniert Folgendes in einer ASP.NET MVC-Anwendung überall:
Beispiel:
Link
Wenn Sie die Eigenschaft für ein erstelltes MyModel-Objekt aufrufen, wird die gültige URL zurückgegeben, um das Modell basierend auf dem Routing in Global.asax anzuzeigenquelle
using
für beideSystem.Web
undSystem.Web.Mvc
Ich mag Omars Antwort, aber das funktioniert bei mir nicht. Nur zur Veranschaulichung: Dies ist die Lösung, die ich jetzt verwende:
quelle
Ein UrlHelper kann aus einer Controller-Aktion heraus wie folgt erstellt werden:
Außerhalb eines Controllers kann ein UrlHelper erstellt werden, indem ein RequestContext aus RouteTable.Routes RouteData erstellt wird.
(Basierend auf Brians Antwort, mit einer geringfügigen Codekorrektur.)
quelle
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
this.ControllerContext.RequestContext
aHttpRequestContext
und Konstruktor vonUrlHelper
erwartet aRequestContext
. Beide Klassen haben nichts miteinander zu tun.Ja, Sie können es instanziieren. Sie können so etwas tun wie:
RouteTable.Routes
ist eine statische Eigenschaft, daher sollten Sie dort in Ordnung sein. um eineHttpContextBase
Referenz zu erhalten,HttpContextWrapper
nimmt eine Referenz aufHttpContext
undHttpContext
liefert diese.quelle
Nachdem ich alle anderen Antworten ausprobiert hatte, endete ich mit
Hasser werden ¯ \ _ (ツ) _ / ¯ hassen
quelle
Ich habe versucht, innerhalb einer Seite (außerhalb eines Controllers) etwas Ähnliches zu tun.
UrlHelper erlaubte mir nicht, es so einfach zu konstruieren wie Pablos Antwort, aber dann erinnerte ich mich an einen alten Trick, um das Gleiche effektiv zu tun:
quelle
Ich denke, was Sie suchen, ist Folgendes:
quelle