2010-09-21 7 views
29

Eine einfache Aufgabe in MVC, wird manchmal eine harte Herausforderung.ASP.NET MVC ActionLink außerhalb des Bereichs

Nun, ich habe einen Bereich namens Admin. Ich habe eine Seite namens "Forbidden" im Shared-Verzeichnis in diesem Bereich.

Das Ziel ist einfach: Ich muss einen Html.ActionLink erstellen, der eine Verknüpfung generiert, um zur Startseite zurückzukehren, die OUTSIDE der Admin-Bereich ist.

Also versuche ich, <%= Html.ActionLink("Back","Index",new {controller="Home"})%> und seine generieren:

http://localhost/Admin/Home/Index 

Sein falsch Ich möchte:

http://localhost/Home/Index 

Wie kann ich einen Link von einem Bereich auf den Standardcontroller Struktur?

Antwort

51

Try this:

<%= Html.ActionLink("Back", "Index", "Home", new { area = "" }, null) %> 

Wenn Bereiche verwenden, sollten Sie immer den Bereich geben Sie Ihre durch Hinzufügen einer Route Wert wie oben in Ihrem ActionLinks anrufen, wenn die Verbindung außerhalb des Bereichs ist (wie in Ihrem Fall), verwenden Sie einfach einen leeren Parameter für den Bereich.


Es ist eine nette Erweiterung, die ich je in einem ASP.NET MVC-Projekt wesentlich finden (T4MVC). Es macht Ihre ActionLinks viel sauberer und schützt sie vor Fehlern.

So ist der obige Code wird wie folgt aussehen:

<%= Html.ActionLink("Back", MVC.Home.Index()) %> 

und wenn eine Fläche mit:

<%= Html.ActionLink("Some Link", MVC.Admin.SomeController.SomeAction()) %> 

Es ist ein Teil des MvcContrib Projekt auf Codeplex here

Sie sollten es in Betracht ziehen.

+0

Ich habe versucht, knifflig zu werden und diese zu meiner AreaRegistration Standardroute hinzufügen, aber das hat nicht funktioniert. Das Handbuch direkt zu area = "" funktioniert in einem regulären Aktionslink. Vielen Dank. – kmehta

+1

Und für Form das ist, wie Sie es tun würden. 'Html.BeginForm (" LogOff "," Konto ", neu {area =" "}, FormMethod.Post, neu {id =" logoutForm "}))' –

Verwandte Themen