Reputation: 23793
This is a continuation of a couple of previous questions I've had. I have a controller called UserController that I'd like to handle actions on two types of objects: User and UserProfile. Among other actions, I'd like to define an Edit action for both of these objects, and within UserController. They'll need to be separate actions, and I don't mind calling them EditUser and EditProfile in the controller, but I'd prefer if the URL's looked like this:
http://www.example.com/User/Edit/{userID}
and
http://www.example.com/User/Profile/Edit/{userProfileID}
Does anyone know how to achieve these routes, given the restraint for the actions being in the same controller?
And for context, previous questions are here and here
Thanks.
Upvotes: 0
Views: 228
Reputation: 65461
You could try something like the following: (untested)
routes.MapRoute(
"EditUser",
"User/Edit/{userID}",
new { controller = "User", action = "EditUser" });
routes.MapRoute(
"EditProfile",
"User/Profile/Edit/{userProfileID}",
new { controller = "User", action = "EditProfile" });
EDIT:
Using MvcContrib (available from http://mvccontrib.codeplex.com/) the syntax is slightly clearer:
(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);
Upvotes: 4
Reputation: 26940
using MvcContrib.Routing;
public class UserController : Controller
{
[UrlRoute(Path = "User/Edit/{userID}")]
public ActionResult UserEdit(int userID)
{
}
}
Upvotes: 1
Reputation: 6891
Just an suggestion, but can't you do something like this to map the correct routes?
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: Then in your controller create two seperate methods called EditUser(guid userId) and Editprofile(guid userId)
Upvotes: 6