2012-05-17 2 views
6

Ich bin neu in ASP.NET MVC3.Falsche Route wird aufgenommen und ActionLink erzeugt falschen Hyperlink

Ich habe einige Routen in Global.asax konfiguriert, gegen die ich einige Hyperlinks mit der @ Html.ActionLink Helper-Methode generieren.

Alle Links sind immer mit Ausnahme der obersten man im folgenden Code korrekt wiedergegeben:

Global.asax

routes.MapRoute(
    null, 
    "Section/{Page}/{SubPage}/{DetailPageName}", 
    new { controller = "Base" } 
    ); 

routes.MapRoute(
    null, 
    "Section/{Page}/{SubPage}", 
    new { controller = "Base", action = "SubPage" } 
    ); 

routes.MapRoute(
    null, 
    "Section/{Page}", 
    new { controller ="Base", action="LandingPage"} 
    ); 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}", // URL with parameters 
    new { controller = "Base", action = "Index" } // Parameter defaults 
    ); 

Action Code

@Html.ActionLink(@subPages.LinkedPageName, "DetailPage", 
    new { 
     Controller = "Base", 
     Page = @ViewBag.PageName, 
     SubPage = @Model.SubPageName, 
     DetailPageName = subPages.LinkedPageName 
    }) 

Die oben sollte die oberste Route wählen zB:

routes.MapRoute(
    null, 
    "Section/{Page}/{SubPage}/{DetailPageName}", 
    new { controller = "Base" } 
    ); 

Aber es ist die Standardroute auswählen!

+0

Ich habe festgestellt, dass auf Ihrer ersten Route keine "Aktion" definiert ist. – Jacob

Antwort

2

In dieser Route Definition:

routes.MapRoute(
    null, 
    "Section/{Page}/{SubPage}/{DetailPageName}", 
    new { controller = "Base" } 
    ); 

Die folgenden Bedingungen erfüllt sein müssen, um die Strecke zu entsprechen:

  1. Wenn es ein controller Parameter in ActionLink geben, dann muss sein Wert Base
  2. Der Parameter Page muss angegeben werden und darf nicht leer sein, da er keinen Standardwert
  3. hat
  4. Der SubPage Parameter muss angegeben werden und darf nicht leer sein, weil es keinen Standardwert
  5. Die DetailPageName hat Parameter angegeben werden muss und darf nicht leer sein, weil es keinen Standardwert

So in dieser hat rufen zu ActionLink:

@Html.ActionLink(@subPages.LinkedPageName, "DetailPage", 
    new { 
     Controller = "Base", 
     Page = @ViewBag.PageName, 
     SubPage = @Model.SubPageName, 
     DetailPageName = subPages.LinkedPageName 
    }) 

Bedingung # 1 eindeutig erfüllt ist. Die Bedingungen # 2, # 3 und # 4 sind jedoch möglicherweise nicht erfüllt, da ihre Werte möglicherweise null sind.

Und weil Sie angeben, dass die Route, die am Ende übereinstimmt, die Standardroute ist, vermute ich, dass der Parameter Page Null oder leer ist. Das heißt, @ViewBag.PageName gibt einen Null- oder Leerwert zurück.

Überprüfen Sie Ihren Code (vielleicht im Debugger oder drucken Sie es in der Ansicht), um zu sehen, ob die PageName Eigenschaft einen Wert hat.