在MVC站点中使用MVC SiteMapProvider和DynamicNodeProvider进行CRUD操作

时间:2013-02-06 16:49:01

标签: asp.net-mvc-3 asp.net-mvc-4 mvcsitemapprovider

我正在尝试让MvcSiteMapProvider与一个执行一些CRUD操作的简单站点一起工作。我几乎已经完成了,但在许多情况下我都会遇到奇怪的行为。

首先,我使用stardard hierachy创建了Controller和Views:
控制器
   - > EquipoController
意见
   - > Equipo - >索引/详细信息/创建/编辑/删除...

接下来,定义了我的mvc.sitemap

<mvcSiteMapNode title="Inicio" controller="Home">
  <mvcSiteMapNode title="Equipo" controller="Equipo">
    <mvcSiteMapNode title="Crear Equipo" action="Create"></mvcSiteMapNode>
    <mvcSiteMapNode title="Detalle Equipo" action="Details" dynamicNodeProvider="MvcApplication2.TestDynamicNodeProvider, MvcApplication2">
      <mvcSiteMapNode title="Editar Equipo" action="Edit"></mvcSiteMapNode>
      <mvcSiteMapNode title="Eliminar Equipo" action="Delete"></mvcSiteMapNode>
    </mvcSiteMapNode>
  </mvcSiteMapNode>

请注意,“编辑”和“删除”操作嵌套在“详细信息”节点中。

接下来,我实现了TestDynamicNodeProvider类,如下所示:     公共类TestDynamicNodeProvider:DynamicNodeProviderBase     {         实体db = new Entities();

    public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
    {
        // Build value 
        var returnValue = new List<DynamicNode>();

        // Create a node for each album 
        foreach (var equipo in db.GEN_EQUIPO)
        {
            DynamicNode node = new DynamicNode();
            node.Title = equipo.DESCRIPCION;
            node.RouteValues.Add("id", equipo.ID);                
            yield return node;                
        }            
    }
}

假设我在GEN_EQUIPO(EQUIPO_A和EQUIPO_B)中有两个项目。这些是我在每个视图中得到的面包屑:
索引:Inicio&gt; Equipo(简单......)
详情视图(第2项):Inicio&gt; Equipo&gt; EQUIPO_B(ok)
编辑视图(第2项):Inicio&gt; Equipo&gt; EQUIPO_A &gt; Editar Equipo(错误!)
删除视图(第2项):Inicio&gt; Equipo&gt; EQUIPO_A &gt; Eliminar Equipo(错误!)

我无法理解为什么在编辑和删除视图中,它始终使用列表中的第一项来构建面包屑。此链接也是错误的( Equipo / Details / 1 ,当它应该是 Equipo / Details / 2

我附上了一个捕获示例。

我不知道我做错了什么!有什么想法吗?

Look at direction bar... and then to the link generated. Also, see that TALADRO is not TRONZADORA!

1 个答案:

答案 0 :(得分:0)

您是否尝试将“savedRouteParameters”添加到您的详细信息,编辑和删除节点?我假设您使用的是“id”这样的字段,所以它看起来像:

preservedRouteParameters = “ID”