【问题标题】:Route parameters not getting preserved [Mvc SiteMap Provider]未保留路由参数 [Mvc SiteMap Provider]
【发布时间】:2015-03-27 06:51:15
【问题描述】:

我有一个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>

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

所以基本上Player ListteamId 参数在我转到Add Player 时会保留,但在我转到Edit Player 时不会保留。

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

【问题讨论】:

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


    【解决方案1】:

    这是因为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 引用每个节点中具有相同共同祖先的相同实体很重要。

    【讨论】:

    • 因此,如果我想进一步向下导航层次结构(Player 的子表,例如 Role),我必须通过 teamIdplayerId 以及所有其他与层次结构中的每个级别对应的 ID,一直到最底层。我的路线应该看起来像 Team/3/Player/27/Role/73/Edit 而不是 Team/Player/EditRole/73。对吗?
    • 如果使用preservedRouteParameters,是的。或者,您可以将段与 /Team-3/Player-27/Role-73/Edit 之类的值结合起来,使其更具可读性。或者,您可以使用具有较短 URL 的动态节点提供程序,但这意味着将整个表作为节点加载。但是preservedRouteParameters 更适合 CRUD 操作。有关每种方法的演示,请参阅本文:shiningtreasures.com/post/2013/09/02/…
    猜你喜欢
    • 2017-07-24
    • 2017-07-04
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    相关资源
    最近更新 更多