2016-10-21 2 views
0

ich mit dem Namen Admin einen Bereich haben, und in AdminAreaRegistration i definieren Route wie Schlag:für mehrere Routen Registrierung in Asp.net MVC Gebiet

public class AdminAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "Admin"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", 
      new {Controller="Home", action = "Index", id = UrlParameter.Optional } 
     ); 
     context.MapRoute(
     name: "Product", 
      url: "Admin/ProductForm-{FormName}", 
     defaults: new { controller = "ProductForm", action = "Index", id = UrlParameter.Optional } 
    ); 
    } 
} 

und in ProductFormController (in Admin Bereich) Ich habe:

public ActionResult Index(string FormName) 
    { 
     return View(); 
    } 

, wenn ich an diese uRL gehen will: http://localhost:5858/Admin/ProductForm-mobile, es sollte den Weg nach Index Aktion im ProductFormController (mit Formnamen = mobilen), aber es kam nicht. Was ist das Problem?

+0

Wo es zu Umleitungen? –

+0

@CristianSzpisjak es gibt mir '404' eror – pejman

+0

Put' Admin_defaut' Route zuletzt. Die Standardroute sollte immer die letzte sein. –

Antwort

1

In ASP.NET MVC funktioniert der Routenmechanismus auf eine sehr einfache Art und Weise, bei der ersten Übereinstimmung wird auf dieses Muster umgeleitet, wobei die nächsten ignoriert werden. Deshalb sollte die Standardroute immer die letzte sein.

Sie müssen Ihre Route "Admin_defaut" bis zum Ende verschieben.

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Admin_default", 
     "Admin/{controller}/{action}/{id}", 
     new {Controller="Home", action = "Index", id = UrlParameter.Optional } 
    ); 
    context.MapRoute(
    name: "Product", 
     url: "Admin/ProductForm-{FormName}", 
    defaults: new { controller = "ProductForm", action = "Index", id = UrlParameter.Optional } 
    ); 
} 

Die korrekte Umsetzung:

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     name: "Product", 
     url: "Admin/ProductForm-{FormName}", 
     defaults: new { controller = "ProductForm", action = "Index", id = UrlParameter.Optional } 
    ); 

    context.MapRoute(
     "Admin_default", 
     "Admin/{controller}/{action}/{id}", 
     new {Controller="Home", action = "Index", id = UrlParameter.Optional } 
    ); 
}