2008-10-20 6 views
36

Wie erzeuge ich freundliche URLs innerhalb des ASP.NET MVC Framework? Zum Beispiel haben wir eine URL bekam die wie folgt aussieht:Wie kann ich eine benutzerfreundliche URL in ASP.NET MVC erstellen?

http://site/catalogue/BrowseByStyleLevel/1

Die 1 ist Id der Studie Niveau (Higher in diesem Fall) zu durchsuchen, aber I'l mag die URL in der gleichen umformatieren Weg StackOverflow tut es.

Zum Beispiel diese beiden URLs werden Sie an der gleichen Stelle nehmen:

https://stackoverflow.com/questions/119323/nested-for-loops-in-different-languages

https://stackoverflow.com/questions/119323/

EDIT: Das freundliche Teil der URL wird als a Schnecke.

+0

welche Art von url tun Sie am Ende sehen wollen, diese ein /catalog/BrowseByStyleLevel/1/Higher? oder/Katalog/BrowseByStyleLevel/Höher? – liggett78

+0

Idealerweise die Sekunde, aber ich brauche die ID, um das Nachschlagen basierend auf dem Text jedes Mal zu speichern. – Kieron

+0

Eine ASP.NET MVC 5-Lösung finden Sie unter http://stackoverflow.com/a/20662188/1298685. –

Antwort

47

Es gibt zwei Schritte, um dieses Problem zu lösen. Erstellen Sie zunächst eine neue Route oder die Standardroute ändern, um einen zusätzlichen Parameter zu akzeptieren:

routes.MapRoute( "Default", // Route name 
        "{controller}/{action}/{id}/{ignoreThisBit}", 
        new { controller = "Home", 
         action = "Index", 
         id = "", 
         ignoreThisBit = ""} // Parameter defaults) 

Jetzt können Sie geben, was Sie zu Ihrer URI am Ende wollen und die Anwendung wird es ignorieren.

Wenn Sie die Links machen, müssen Sie die „freundliche“ Text hinzufügen:

<%= Html.ActionLink("Link text", "ActionName", "ControllerName", 
        new { id = 1234, ignoreThisBit="friendly-text-here" }); 
+1

Hallo, wenn ich das versuche, kommt die von Html.ActionLink generierte URL folgendermaßen heraus: /Catalog/BrowseBySubject/3?subject = Chemie statt /Katalog/BrowseBySubject/3/Chemie Irgendwelche Ideen -. ich die Strecke unterhalb der ‚Standard‘ Route, und änderte den Namen in ‚BrowseBySubject“ – Kieron

+6

Das bedeutet, es ist nicht zu finden, hinzugefügt haben Der richtige Weg. Bewegen Sie die Route über Default (die Standard wird ausgeblendet, wenn nichts anderes sie unterscheidet, wie eine Einschränkung). Verwenden Sie eine Einschränkung, um diese neue Route nur bei Bedarf zu finden (z. B. auf Catalog/BrowseBySubject, oder was auch immer Regel ist) –

+0

+1 für eine nette prägnante Antwort –

1

Sie haben eine Route auf der global.asax

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

Sie Ihre eigene Route definieren kann wie:

Controller die cs-Klasse in der die Controller-Ordner ist.

können Sie Ihre ID definieren - mit dem Namen, den Sie wählen.

Das System wird den Wert an Ihre actionResult-Methode übergeben.

können Sie mehr über diesen Schritt lesen Sie hier: http://www.asp.net/learn/mvc/tutorial-05-cs.aspx

1

Dies ist, wie ich die Schnecke URL auf meine Anwendung implementiert haben. Hinweis: Die standardmäßige Maproute sollte nicht geändert werden und auch die Routen werden in der Reihenfolge verarbeitet, in der sie der Routenliste hinzugefügt werden.

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", 
      action = "Index", 
      id = UrlParameter.Optional 
    } // Parameter defaults 
); 
routes.MapRoute("Place", "{controller}/{action}/{id}/{slug}", new { controller = "Place", action = "Details", id = UrlParameter.Optional,slug="" }); 
+0

Danke für diesen Hinweis, Route Matching Reihenfolge wirklich wichtig, wie in den meisten Frameworks. – Dr1Ku

Verwandte Themen