2017-09-11 2 views
2

Ich arbeite an einem C# ASP.NET MVC-Projekt mit Entity Framework.Nach dem Ändern des Pfades mit RouteConfig funktioniert der alte Pfad nicht

Ich versuche, den URL-Pfad RouteConfig.cs

zuerst den Code wie dieses ich die URL Chenge wollte

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional } 
     ); 
    } 
} 

sah mit Änderungen localhost/Customer/Index- localhost/Index

So habe ich diese Zeile von Code und es funktionierte

routes.MapRoute(
    name: "customer", 
    url: "customer", 
    defaults: new { controller = "Customer", action = "Index"} 
); 

Als nächstes habe ich versucht, localhost/Customer/Details/2 zu localhost/CustomerName/2 zu ändern.

// CustomerName varies with each customer 

so habe ich dieses

routes.MapRoute(
    name: "customerDetail", 
    url: "customer/{name}/{id}", 
    defaults: new { controller = "Customer", action = "Details", id = UrlParameter.Optional, name = UrlParameter.Optional } 
); 

jetzt korrekt Kundendaten Seite geladen wird.

Das Laden der Indexseite mit diesem Pfad localhost/Customer/Index verursacht einen Fehler, während localhost/Customer keinen Fehler verursacht. Warum passiert das?

EDIT

Dies ist, wie meine RouteConfig wie

sieht
public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "customer", 
      url: "customer", 
      defaults: new { controller = "Customer", action = "Index"} 
     ); 
     routes.MapRoute(
      name: "customerDetail", 
      url: "customer/{name}/{id}", 
      defaults: new { controller = "Customer", action = "Details", id = UrlParameter.Optional, name = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional } 
     ); 
    } 
} 
+0

bestellen, wie Sie hinzufügen Routen wichtig ist. Zeigen Sie die RouteConfig so an, wie sie gerade ist, nachdem Sie Ihre Änderungen vorgenommen haben. Wahrscheinlich haben Sie einen Routenkonflikt. – Nkosi

+0

Scheint, dass dort eine falsche Routenreihenfolge in 'RouteConfig' definiert ist. Die spezifischsten Routen sollten oberhalb von breiteren/Standardrouten liegen. –

+0

Ihre zweite Route generiert nicht 'localhost/Index' - sie generiert' localhost/customer' –

Antwort

1

Schließlich fand ich eine Antwort.

Wie @StephenMuecke kommentiert

localhost/Customer/Index entspricht dem customerDetail Route (und übergibt "Index" an den ID-Parameter)

So nachgeprüft ich meinen Code und fand, dass das id Feld in localhost/Customer/Details/2 ist nicht optional und ich habe es versehentlich als optional definiert, id = UrlParameter.Optional.

routes.MapRoute(
     name: "customerDetail", 
     url: "customer/{name}/{id}", 
     defaults: new { controller = "Customer", action = "Details", name = UrlParameter.Optional } 
    ); 

Voll RoutConfig Code:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "customer", 
      url: "customer", 
      defaults: new { controller = "Customer", action = "Index"} 
     ); 
     routes.MapRoute(
      name: "customerDetail", 
      url: "customer/{name}/{id}", 
      defaults: new { controller = "Customer", action = "Details",name = UrlParameter.Optional } 
    ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional } 
     ); 

    } 
} 
0

Versuchen Sie, den folgenden Code ein. Entfernen id als UrlParameter.Optional aus vorhandenen Code

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     name: "customer", 
     url: "customer", 
     defaults: new { controller = "Customer", action = "Index"} 
    ); 
    routes.MapRoute(
     name: "customerDetail", 
     url: "customer/{name}/{id}", 
     defaults: new { controller = "Customer", action = "Details", name = UrlParameter.Optional } // Removed idas optional from existing code 
    ); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional } 
    ); 

    } 
} 
Verwandte Themen