我有一个Team
表和一个Player
表,其中TeamId
作为外键。
我需要对玩家进行CRUD操作,我有PlayerController
。 Index
方法以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>
问题在于,当我从Add Player
导航到Player List
时,我可以通过点击面包屑中的链接返回Player List
页面。但是,当我尝试从Player List
页面返回Edit Player
页面时,会出现错误,因为由痕迹导线创建的网址不包含teamId
参数。
所以基本上teamId
的{{1}}参数在我转到Player List
时保留,但在我转到Add Player
时则不会。
为什么会这样?有办法解决这个问题吗?
答案 0 :(得分:2)
这是因为preservedRouteParameters
只知道当前请求中的值。导航到Edit Player
链接时,请求中没有teamId
,因此Player List
链接没有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
引用在每个节点中具有相同的实体非常重要。