2010-11-02 4 views
0

Ceci est une suite de quelques questions précédentes que j'ai eues. J'ai un contrôleur appelé UserController que je voudrais gérer des actions sur deux types d'objets: User et UserProfile. Entre autres actions, je voudrais définir une action d'édition pour ces deux objets, et dans UserController. Ils doivent être des actions distinctes, et je ne me dérange pas de les appeler EditUser et EditProfile dans le contrôleur , mais je préférerais que ressemblait à de l'URL suivante:ASP.NET MVC Routes: Comment nommer une action quelque chose de complètement différent que dans l'URL

http://www.example.com/User/Edit/{userID} 

et

http://www.example.com/User/Profile/Edit/{userProfileID} 

Est-ce que quelqu'un sait comment réaliser ces routes, compte tenu de la restriction pour les actions étant dans le même contrôleur?

Et pour le contexte, les questions précédentes sont here et here

Merci.

+0

devrait peut-être @ Matt mentionner la question précédente où nous discutions plus tôt . Donne aux gens plus d'informations – Rob

+0

Ajouté, bonne suggestion. –

+0

@Matt, vous avez déjà trouvé une bonne solution à cela? – Rob

Répondre

5

Juste une suggestion, mais ne pouvez-vous pas faire quelque chose comme ça pour cartographier les routes correctes?

routes.MapRoute(
    "ProfileRoute", // Route name 
    "User/Edit/{userProfileID}", // URL with parameters 
    new { controller = "User", action = "EditUser" } // Parameter defaults 
); 

routes.MapRoute(
    "ProfileEditRouet", // Route name 
    "User/Profile/Edit/{userProfileID}", // URL with parameters 
    new { controller = "User", action = "Editprofile" } // Parameter defaults 
); 

EDIT: Ensuite, dans votre contrôleur créer deux méthodes séparées appelées EditUser (guid userId) et editprofile (guid userId)

+0

Patrick m'a battu aussi – Rob

4

Vous pouvez essayer quelque chose comme ce qui suit: (non testé)

routes.MapRoute(
    "EditUser", 
    "User/Edit/{userID}", 
    new { controller = "User", action = "EditUser" }); 

routes.MapRoute(
    "EditProfile", 
    "User/Profile/Edit/{userProfileID}", 
    new { controller = "User", action = "EditProfile" }); 

EDIT:

En utilisant MvcContrib (disponible à partir http://mvccontrib.codeplex.com/) la syntaxe est légèrement plus claire:

(using MvcContrib.Routing;) 

MvcRoute 
    .MappUrl("User/Edit/{userID}") 
    .WithDefaults(new { controller = "User", action = "EditUser" }) 
    .AddWithName("EditUser", routes); 

MvcRoute 
    .MappUrl("User/Profile/Edit/{userProfileID}") 
    .WithDefaults(new { controller = "User", action = "EditProfile" }) 
    .AddWithName("EditProfile", routes); 
1
using MvcContrib.Routing; 

public class UserController : Controller 
{ 
    [UrlRoute(Path = "User/Edit/{userID}")] 
    public ActionResult UserEdit(int userID) 
    { 

    } 
} 
+0

Intéressant. MvcContrib.Routing est-il inclus dans MVC 1.0? –

+0

hmm pas sûr ... je ne suis pas entré dans le jeu de mvc jusqu'à 2.0. peut-être essayer celui-ci http://itcloud.codeplex.com/ – dotjoe

Questions connexes