如何使用路由配置中注册的自定义路由创建路由链接?



我在RouteConfig中有以下路由:

routes.MapRoute(
name: "AdminGroupsEdit",
url: "admin/groups/{id}",
defaults: new { controller = "Group", action = "Edit" }
);
routes.MapRoute(
name: "AdminGroupsEditStudent",
url: "admin/groups/{id}/students/{studentid}",
defaults: new { controller = "Student", action = "Edit" }
);
routes.MapRoute(
name: "AdminGroupsCreateStudent",
url: "admin/groups/{groupId}/students/create-student",
defaults: new { controller = "Student", action = "Create" }
);

当 im 在带有 iri 的页面上时:

管理员/组/1

有一个路由链接:

@Html.RouteLink("Add", routeName: "AdminGroupsCreateStudent", routeValues: null, htmlAttributes: new { @class = "btn btn-success" })

但是当我单击它时,asp.net 将使用名称"管理员组编辑"进行路由。 如何创建路由链接以转到名称为"AdminGroupsCreateStudent"的路由?如果我需要传递 groupId 抛出路由值,那么我如何从 Uri 获取它?

我可以看到您当前路由方式的几个问题,因此我在下面详细介绍了要解决的建议。

  1. 在您的示例中,路由引擎能够理解的只是您尝试创建路由名称的 URLAdminGroupsCreateStudent。路由引擎能够确认它有一个名为AdminGroupsCreateStudent的路由,但是当尝试将路由值与参数匹配时,它无法继续,因为您尝试传递null并且此路由需要参数groupId才能成功,因此它返回引用您所在页面的路由。
  2. 通过在 URL 的中途创建参数,路由引擎 需要路由的值才能成功呈现。可悲的是,即使尝试为groupId参数分配值UrlParameter.Optional,您仍然会在运行时遇到相同的问题,因为引擎再次无法对 Url 中间的null参数做任何事情,因为它聪明地知道它会断开链接,这就是参数放在末尾或具有默认值的原因。

我的建议是执行以下操作之一:

groupId添加到路由 URL 的末尾,并将默认值设置为UrlParameter.Optional

routes.MapRoute(
name: "AdminGroupsCreateStudent",
url: "admin/groups/students/create-student/{groupId}",
defaults: new { controller = "Student", action = "Create", groupId = UrlParameter.Optional }
);

或者,如果需要设置此 Url,则只需为groupId设置默认值来处理null,然后在Create操作中管理此值的逻辑。

routes.MapRoute(
name: "AdminGroupsCreateStudent",
url: "admin/groups/{groupId}/students/create-student",
defaults: new { controller = "Student", action = "Create", groupId = 0 } //0 == Unknown
);

相关内容

  • 没有找到相关文章

最新更新