我的应用程序中使用了以下类型的URL.
localhost/admin/userdetail/id
localhost/admin/userdetail/id/true
localhost/admin/userdetail/id/true/success
这是我的管理员控制器
bool inSaveAction,string status are optional
[Authorize] public ActionResult UserDetail(string Id,bool inSaveAction,string status) { } [HttpPost,Authorize,ValidateAntiForgeryToken] public ActionResult SaveUserDetail(UserDetailviewmodel viewmodel) { User userToSave = new User(); AdminService.UpdateUser(userToSave); //This is calling the above function as it sending all 3 params return RedirectToAction("UserDetail",new { Id = viewmodel.Id,inSaveAction = true,status = "success" }); }
Below case is not working
@Html.ActionLink("DisplayName","UserDetail",new { id = Model.Id })
在Global.asax中
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",// nothing optional } ); routes.MapRoute("UserDetail-WithoutStatus","UserDetail/{id}/{inSaveAction}",// nothing optional } ); routes.MapRoute("UserDetail-WithoutSaveAction",id = UrlParameter.Optional } );
然后创建链接:
@Html.ActionLink("Link","Index","Admin",new { id = 1,success = "success" },null)
您还需要将可选参数设置为可空,否则如果缺少id或inSaveAction,您将获得异常.
public ActionResult UserDetail(int? id,bool? inSaveAction,string status) { }