2012-04-11 1 views
0

Ich habe eine Layoutseite in ~/Views/Shared/_Layout.cshtml und es funktioniert gut für alle normalen Ansichten, die gerendert werden. Ich habe jedoch einen Bereich namens "Demos" erstellt und in der Datei ~/Areas/Demos/Views/_ViewStart.cshtml habe ich auf meine ursprüngliche Layout-Seite verwiesen.Kann für jede Ansicht eine Layoutseite verwendet werden, einschließlich der Bereichsansichten?

Das funktioniert gut, bis auf einige Anrufe an @Html.ActionLink() jetzt der Gebietsname vorangestellt wird. Wenn also @Html.ActionLink("Blog", "Index", "Blog") normalerweise einen Link wie "website.com/Blog/Index" in Gebietsansichten generiert, wird "website.com/Demos/Blog/Index" generiert.

Irgendwelche Ideen?

Antwort

0

Bereiche nutzen zu können, öffnen Sie die Datei Global.asax und fügen Sie den folgenden Code in das Application_Start Methode

AreaRegistration.RegisterAllAreas(); 

Sie in einem Bereich verknüpfen können, wie Sie in jeder MVC-Anwendung würde aber einen Link zu einer anderen zu erzeugen, In diesem Bereich müssen Sie den Zielbereichsnamen im Parameter routeValues ​​für diese Methoden explizit übergeben.

@Html.ActionLink("Blog", "Index", "Blog", new { area = "blog" }, null) 

null Parameter ist nur erforderlich, weil die Action Methode Überlastungen, die einen Parameter Routevalues ​​auch einen Htmlattributes Parameter haben, aber es ist nicht erforderlich, um der Lage sein, zwischen den Bereichen zu verknüpfen.

UPDATE

Sie RouteLink() statt ActionLink() verwenden können, um die Fläche Registrierungen zu umgehen.

@Html.RouteLink("Blog", "MyRoute", new { action = "Index", controller = "Blog" }) 

Der zweite Parameter („MyRoute“) einen Routennamen in Global.asax so registriert ist RouteLink() zu verwenden, um zwischen verschiedenen Bereichen zu verknüpfen, müssen Sie nur die richtige Route Namen angeben.

+0

Was ist mit der Verknüpfung zu einem Nicht-Bereich? In meinem Fall bin ich in einem Bereich, der versucht, sich mit einem Controller zu verbinden, der nicht in einem Gebiet liegt. Außerdem habe ich RegisterAllAreas() bereits global aufgerufen. – Chev

+1

@ Html.ActionLink ("Blog", "Index", "Blog", neu {area = ""}, null) Was passiert, ist die ActionLink Methode verwendet die aktuelle Route Daten, um die Links zu erstellen. –

+0

@NickBork Danke. – Chev

Verwandte Themen