路由参数未保留 [Mvc SiteMap Provider]

Route parameters not getting preserved [Mvc SiteMap Provider]

我有一个 Team table 和一个 Player table,外键是 TeamId

我需要对播放器进行 CRUD 操作,为此我有 PlayerControllerIndex 方法以 teamId 作为参数,并显示该团队中的所有球员。 Add 方法也将 teamId 作为参数,并将一名球员添加到该球队。 Edit方法以playerId为参数,编辑对应的播放器。

现在,我正在使用 Mvc SiteMap Provider 在我的项目中创建菜单和面包屑导航。仅显示相关属性,我的站点地图的一部分如下所示:

<mvcSiteMapNode title="Player List" preservedRouteParameters="teamId">
    <mvcSiteMapNode title="Add Player" preservedRouteParameters="teamId"></mvcSiteMapNode>
    <mvcSiteMapNode title="Edit Player" preservedRouteParameters="playerId"></mvcSiteMapNode>
</mvcSiteMapNode>

问题是,当我从 Player List 导航到 Add Player 时,我可以通过单击面包屑中的 link 返回到 Player List 页面。但是当我尝试从 Edit Player 页面返回到 Player List 页面时,出现错误,因为面包屑创建的 URL 不包含 teamId 参数。

所以基本上 Player ListteamId 参数在我转到 Add Player 时被保留,但当我转到 Edit Player 时却没有。

为什么会这样?有办法解决这个问题吗?

这是因为preservedRouteParameters只知道当前请求中的值。当导航到 Edit Player link 时,请求中没有 teamId,因此 Player List link 不会有 teamId 的值复制.

您可以通过将 teamId 添加到 Edit Player 节点来解决此问题。

<mvcSiteMapNode title="Player List" preservedRouteParameters="teamId">
    <mvcSiteMapNode title="Add Player" preservedRouteParameters="teamId"></mvcSiteMapNode>
    <mvcSiteMapNode title="Edit Player" preservedRouteParameters="playerId,teamId"></mvcSiteMapNode>
</mvcSiteMapNode>

并将 teamId 添加到关联的路由、ActionLinks、RouteLinks 等,这样每次 Edit Player 导航到时它都会包含在请求中。

请注意,重要的是 teamId 在具有相同共同祖先的每个节点中引用相同的实体。