7

我的应用程序中使用了以下类型的 url。

本地主机/管理员/用户详细信息/ID

本地主机/管理员/用户详细信息/id/true

localhost/admin/userdetail/id/true/成功

这是我的管理员控制器

bool inSaveAction,字符串状态可选

    [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" });
    }

以下情况不起作用

  @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 操作的可选参数?

4

1 回答 1

9

您缺少路由配置中的参数。为了使这个工作与不同的参数可选(如菲尔哈克的帖子),你需要定义多个路线

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)

您还需要将可选参数设置为可为空,否则如果 id 或 inSaveAction 缺失,您将获得异常。

public ActionResult UserDetail(int? id, bool? inSaveAction, string status)
{

}
于 2013-01-05T08:00:41.583 回答