Asp.net mvc MVC3中有两个可选参数的路由不工作
我的应用程序中使用了以下类型的url localhost/admin/userdetail/id localhost/admin/userdetail/id/true localhost/admin/userdetail/id/true/success 这是我的管理员控制器 bool inSaveAction,字符串状态是可选的 下面的案例不起作用 在Global.asax中Asp.net mvc MVC3中有两个可选参数的路由不工作,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-routing,url-routing,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc Routing,Url Routing,我的应用程序中使用了以下类型的url localhost/admin/userdetail/id localhost/admin/userdetail/id/true localhost/admin/userdetail/id/true/success 这是我的管理员控制器 bool inSaveAction,字符串状态是可选的 下面的案例不起作用 在Global.asax中 routes.MapRoute("UserDetail", "UserDetail/{id}"
routes.MapRoute("UserDetail",
"UserDetail/{id}",
new
{
controller = "Admin",
action = "UserDetail",
id = UrlParameter.Optional
}
);
我跟着
如何使inSaveAction&status成为我的UserDetail操作的可选参数?您缺少路由配置中的参数。为了使这项工作具有不同的可选参数(如Phil Haack的文章),您需要定义多个路由
routes.MapRoute("UserDetail-WithStatus",
"UserDetail/{id}/{inSaveAction}/{status}",
new
{
controller = "Admin",
action = "UserDetail",
// nothing optional
}
);
routes.MapRoute("UserDetail-WithoutStatus",
"UserDetail/{id}/{inSaveAction}",
new
{
controller = "Admin",
action = "UserDetail",
// nothing optional
}
);
routes.MapRoute("UserDetail-WithoutSaveAction",
"UserDetail/{id}",
new
{
controller = "Admin",
action = "UserDetail",
id = UrlParameter.Optional
}
);
然后使用以下内容创建链接:
@Html.ActionLink("Link", "Index", "Admin", new { id = 1, inSaveAction = true, success = "success" }, null)
您还需要将可选参数设置为nullable,否则,如果缺少id或inSaveAction,将出现异常
public ActionResult UserDetail(int? id, bool? inSaveAction, string status)
{
}
我试过你给的密码。这也不起作用。它没有采取行动的方法。路由或操作方法参数有问题吗?我刚刚发布了一个编辑,您需要使id和inSaveAction为空。但什么不起作用?我测试了这个,所有的路线都正常。谢谢。状态也是可选的。对不起,你是什么意思?你能确认这些路线有效吗?在UserDetail操作中设置断点,然后尝试URL/Admin/UserDetail/1、/Admin/UserDetail/1/true、/Admin/UserDetail/1/true/success。设置了相应的参数后,所有这些都应该可以工作。在所有情况下,我都必须传递Id。那么,我们可以删除最后一个路由选项参数吗?
@Html.ActionLink("Link", "Index", "Admin", new { id = 1, inSaveAction = true, success = "success" }, null)
public ActionResult UserDetail(int? id, bool? inSaveAction, string status)
{
}