这是我之前几个问题的延续。我有一个名为UserController的控制器,我想处理两种类型对象的操作:User和UserProfile。在其他操作中,我想为这两个对象和UserController定义一个Edit操作。它们需要是单独的操作,我不介意在 controller 中将它们称为EditUser和EditProfile,但我更喜欢URL看起来像这样:
http://www.example.com/User/Edit/{userID}
和
http://www.example.com/User/Profile/Edit/{userProfileID}
有没有人知道如何实现这些路线,因为对同一控制器中的动作有所限制?
感谢。
答案 0 :(得分:6)
只是一个建议,但你不能做这样的事情来映射正确的路线吗?
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
);
编辑: 然后在你的控制器中创建两个单独的方法,名为EditUser(guid userId)和Editprofile(guid userId)
答案 1 :(得分:4)
您可以尝试以下内容:(未经测试)
routes.MapRoute(
"EditUser",
"User/Edit/{userID}",
new { controller = "User", action = "EditUser" });
routes.MapRoute(
"EditProfile",
"User/Profile/Edit/{userProfileID}",
new { controller = "User", action = "EditProfile" });
编辑:
使用MvcContrib(可从http://mvccontrib.codeplex.com/获得),语法更加清晰:
(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);
答案 2 :(得分:1)
using MvcContrib.Routing;
public class UserController : Controller
{
[UrlRoute(Path = "User/Edit/{userID}")]
public ActionResult UserEdit(int userID)
{
}
}