路径参数未被保留[Mvc SiteMap Provider]

时间:2015-03-27 06:51:16

标签: asp.net-mvc asp.net-mvc-routing mvcsitemapprovider

我有一个Team表和一个Player表,其中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>

问题在于,当我从Add Player导航到Player List时,我可以通过点击面包屑中的链接返回Player List页面。但是,当我尝试从Player List页面返回Edit Player页面时,会出现错误,因为由痕迹导线创建的网址不包含teamId参数。

所以基本上teamId的{​​{1}}参数在我转到Player List时保留,但在我转到Add Player时则不会。

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

1 个答案:

答案 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引用在每个节点中具有相同的实体非常重要。