1

CRUD操作を実行する単純なサイトでMvcSiteMapProviderを動作させようとしています。私はそれをほぼ達成しましたが、多くのシナリオで奇妙な動作をしています。

まず、標準的な階層を使用してコントローラーとビューを作成しました:
コントローラー
--> 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>

Edit 操作と Delete 操作は Details ノードにネストされていることに注意してください。

次に、次のように TestDynamicNodeProvider クラスを実装しました。 public class TestDynamicNodeProvider : DynamicNodeProviderBase { Entities 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 に 2 つのアイテム (EQUIPO_A と EQUIPO_B) があるとします。これらは私がすべてのビューで取得するブレッドクラムです:
インデックス: Inicio > Equipo (簡単...)
詳細ビュー (2 番目の項目): Inicio > Equipo > EQUIPO_B (OK)
編集ビュー (2 番目の項目): Inicio > Equipo > EQUIPO_A > エディターEquipo (間違った!)
削除ビュー (2 番目の項目): Inicio > Equipo > EQUIPO_A > Eliminar Equipo (間違った!)

編集ビューと削除ビューで、リストの最初の項目を常に使用してブレッドクラムを作成する理由がわかりません。また、リンクが間違っています ( Equipo/ Details/2 のはずなのにEquipo/Details/1 )

より多くの例のためにキャプチャを添付します。

私は自分が間違っていることについての手がかりがありません!何か案が?

方向バーを見て...そして生成されたリンクを見てください。 また、TALADRO が TRONZADORA ではないことも確認してください。

4

1 に答える 1

0

「preservedRouteParameters」を詳細に追加して、ノードを編集および削除してみましたか? 「id」などのフィールドを使用していると仮定すると、次のようになります。

preserveRouteParameters="id"

于 2013-05-08T07:11:06.713 に答える