2010-11-25 5 views
0

Je voudrais modifier les routes URL standard ASP.NET MVCobjet dans asp.net mvc 2

http://example.com/Controller/Action[/Id] 

à quelque chose comme:

http://example.com/Controller/Id/Action 

La modification du système d'itinéraire est trivial mais j'ai des problèmes lors de la gestion des valeurs par défaut. Je besoin de ces URL

http://example.com/Controller/ -> Maps to Index() -> List of items 
http://example.com/Controller/Create 
http://example.com/Controller/Id[/Details] -> Maps to Details(id) 
http://example.com/Controller/Id/Edit -> Maps to Edit(id) 
http://example.com/Controller/Id/Delete -> Maps to Delete(id) 

Aïe! Cela signifie pas mal de routes au lieu de la bonne par défaut. Ou puis-je utiliser des paramètres d'URL avec des valeurs par défaut au milieu de l'URL?

La prochaine étape consiste à utiliser un cadre convivial référence d'objet (mais unique!) (Par exemple le nom du client. Supposons qu'il est unique) au lieu d'une identité d'enregistrement de DB (id). Tels que:

http://example.com/Controller/Name[/Details] -> Maps to Details(id) 

Jusqu'à présent, si bon mais je ne suis pas sûr que c'est une bonne idée de l'utiliser pour la page Modifier (et peut-être supprimer): Le formulaire de modification permet à l'utilisateur de modifier le nom de l'objet, ce qui conduit à une éventuelle discordances dans l'URL. Devrais-je m'en tenir à l'identifiant dans Modifier les URL?

Avez-expérience toute personne ayant de telles URL? Avez-vous poussé l'idée vers des systèmes hiérarchiques? Est-ce une bonne idée ou vais-je plonger dans plus de problèmes que de bénéfices?

TIA pour vos pensées.

Répondre

-1

Essayez ceci:

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

contrôleur va à la maison par défaut et déclenche l'action Index de ne pas dit autre sage. Id est aussi facultatif. Tout ce que j'ai réellement changé était l'ordre des paramètres.

En ce qui concerne les res de la question. Si les utilisateurs sont connectés et qu'ils modifient leur profil, par exemple, vous pouvez obtenir l'ID de ce qu'ils doivent modifier depuis un autre endroit - un cookie par exemple. Je fais cela dans ma gestion des utilisateurs. URL/utilisateur/Edit est unique pour l'utilisateur qui est connecté.

+5

Cela ne fonctionnera pas parce que les paramètres facultatifs ne peuvent être à la fin de l'URL. –

+0

Oh, je ne le savais pas. Hmm .. – gligoran

+0

Gligoran, j'ai besoin de plus d'itinéraires pour gérer le cas où id n'est pas spécifié. Merci quand même –

2

Vous pouvez le faire que si le paramètre d'identification est toujours présent dans l'URL. Pour des raisons évidentes, le paramètre optionnel ne peut être qu'à la fin de l'url ou il est impossible de les désambiguïser.