我想知道是否有可能在链接中有超过1个动作。例如,如果我想要多个链接,例如:
http://www.mywebsite.com/(CONTROLLER)/(ID)/(ACTION)
[HTTP://] www.mywebsite.com/user/Micheal/EditMovies [HTTP://] www.mywebsite.com/user/Micheal/EditFavorites
有没有某种方法可以做到这一点?如果没有,我是否必须在函数中指定多个id,然后使用案例来确定将要发送到哪个页面?
在我的UserController.cs中,我有:
public ActionResult Index(string username)
{
if (username != null)
{
try
{
var userid = (Membership.GetUser(username, false).ProviderUserKey);
Users user = entity.User.Find(userid);
return View(user);
}
catch (Exception e)
{
}
}
return RedirectToAction("", "Home");
}
在我的路线中,我有:
routes.MapRoute(
name: "User",
url: "User/{username}",
defaults: new { controller = "User", action = "Index" }
);
我正在尝试做的是为第二个动作提供额外的功能,所以我可以做类似的事情:
User/{username}/{actionsAdditional}
在我的UserController中,我可以将更多动作引导到第二个动作actionsAdditional
public ActionResult Index(string username)
{
if (username != null)
{
try
{
var userid = (Membership.GetUser(username, false).ProviderUserKey);
Users user = entity.User.Find(userid);
return View(user);
}
catch (Exception e)
{
}
}
return RedirectToAction("", "Home");
}
public ActionResult EditFavorites()
{
// DoStuff }
答案 0 :(得分:0)
你可以用多种方式做到这一点,这里只有一个:
设置处理此问题的路线:
routes.MapRoute("UserEditsThings",
"user/{id}/edit/{thingToEdit}",
new { controller = "UserController", action="Edit" },
new { thingToEdit = ValidThingsToEditConstraint() }
);
然后,User
控制器中的操作应如下所示:
public ActionResult Edit(ThingToEdit thingToEdit) {
ThingToEditViewModel viewModel = new ThingToEditViewModel(thingToEdit);
return View(viewModel);
}
RouteConstraint
是他们的输入(thingToEdit),并确保它是有效的(你可以在一些地方这样做 - 比如在Custom ModelBinder中):
public class ValidThingsToEditConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
//simplistic implementation simply to show what's possible.
return values['thingToEdit'] == "Favorites" || values['thingToEdit'] == "Movies";
}
}
现在,通过这种方式,您可以使用一种方法来编辑电影和收藏夹,只需添加一个参数即可显示他们正在编辑的内容的“类型”。
如果您想保留当前路线,您应该能够执行以下操作:
routes.MapRoute("UserEditsThings",
"user/{id}/edit{thingToEdit}",
new { controller = "UserController", action="Edit" },
new { thingToEdit = ValidThingsToEditConstraint() }
);
我已经离开ASP.NET MVC大约7个月了,所以这可能有点生疏了。它尚未经过语法错误的测试,而python的部分可能会闪现。但它应该让你到那里。