加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 在MVC3中使用两个可选参数的路由不起作用

发布时间:2020-12-15 21:03:55 所属栏目:asp.Net 来源:网络整理
导读:我的应用程序中使用了以下类型的URL. localhost/admin/userdetail/id localhost/admin/userdetail/id/true localhost/admin/userdetail/id/true/success 这是我的管理员控制器 bool inSaveAction,string status are optional [Authorize] public ActionResul
我的应用程序中使用了以下类型的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
            }
         );

我跟着http://haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url-parameters.aspx

我如何制作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)
{

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读