2012-04-09 11 views
4

Ich stelle eine ähnliche Frage here Ich denke, das ist eine wirklich einfache (natürlich nicht für mich). Ich habe eine Erweiterungsmethode für HTML-Helfer und ich muss aktuelle URL der Ansicht mit HtmlHelper erhalten. Hat jemand eine Ahnung davon?Holen Sie aktuelle URL der URL mit HtmlHelper in ASP.NET MVC 3

+1

Sie werden im Auge behalten, dass ein Ansicht ist nicht dasselbe wie eine Controller-Aktion. MVC-Routen basieren auf Controllern und Aktionen. Aktionen können jede Ansicht als Ausgabe angeben. Das bedeutet, dass Sie nicht immer darauf vertrauen können, dass der Name der Ansicht mit der Aktion identisch ist. Können Sie uns ein Beispiel dafür geben, was Sie damit versuchen? –

+0

@Nick Bork Eigentlich stelle ich hier eine Hauptfrage: http://stackoverflow.com/questions/10069687/use-htmlhelper-to-get-action-in--beginform-method-of-asp-net-mvc-3 I brauche einen Wert für das action-Attribut im form-Tag und ich denke, dieser Wert ist gleich der Url der aktuellen Ansicht. – Saeid

+0

Views haben keine URLs, Controller-Aktionen tun dies. Eine Ansicht ist nur ein Blob von HTML. Ihre Aktionen führen einige CRUD auf dem Server durch und entscheiden dann, welcher Blob von HTML zurückgegeben werden soll. Sie können NIEMALS auf eine Ansicht zugreifen, ohne eine Controller-Aktion auszuführen (mit Ausnahme einer PartialView, die in einer Ansicht verschachtelt ist). Am häufigsten entsprechen die Namen der Namen den Namen der Aktionen, dies ist jedoch nicht immer der Fall. Ich habe ein Codebeispiel für die Verwendung eines URL-Helfers hinzugefügt. Der URL-Helper ermöglicht es Ihnen, die URL für eine bestimmte Route oder Controller-Aktion zu erhalten. Das sollte Ihnen helfen, das Action-Tag eines Formulars aufzufüllen. –

Antwort

5

Wenn Sie nur die angeforderte URL möchten, können Sie es einfach über das Request.Url Objekt erhalten. Dies gibt einen Uri zurück, aber wenn du die rohe URL willst, dann Request.RawUrl.

6

wenn Sie Informationen über die Routen-Informationen zu erhalten, wie die Steuerung oder Aktionsmethode, die

genannt werden, können Sie das RouteData Wörterbuch aus dem ViewContext Objekt zugreifen

wie diese

@ViewContext.RouteData.Values["Controller"] 
sein

mit dem RouteData Wörterbuch können Sie alle benötigten Informationen über den Controller, Aktion und zusätzliche Parameter 'Name, je nachdem, was Sie wollen

9

Basierend auf Ihrem Kommentar und den ursprünglichen Thread Sie verknüpfen Ich glaube, Sie einen URL-Helfer verwenden mögen die URL für die Formularaktion zu erhalten, aber ich hätte falsch verstanden, was Sie wollen:

in einer Ansicht:

@Url.Action(null) returns the current controller/action 
@Url.Action("Action") returns a custom action with current controller 
@Url.Action("Action","Controller") returns a custom controller and action 

In einem HTML-Helfer:

public static MvcHtmlString MySpecialHelper(this HtmlHelper htmlHelper) 
{ 
     UrlHelper urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext,htmlHelper.RouteCollection); 
     string url = urlHelper.Action("Controller","Action"); 

     //To get the action based on the current Action/Controller use: 
     url = urlHelper.Action(htmlHelper.ViewData["action"] as string); 

     //or 
     url = urlHelper.Action(null); 

     return new MvcHtmlString(url); 
} 
0

Sie konnten die Request.RawUrl Eigenschaft oder Request.Url.ToString() oder Request.Url.AbsoluteUri verwenden.

0

können Sie verwenden ein Html Helper das Objekt Seite als Referenz vorbei, wie folgt aus:

@helper GoHome(WebViewPage page) 
{ 
    <a href="@page.Url.Action("Index", "Home")"></a> 
} 

Ein in der Ansicht verwenden Sie einfach:

@Links.GoHome(this)