Domanda

Ho scritto un fornitore di nodo dinamico che sembra così:

public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node)
    {
        var dictionaryDefs = from d in provider.GetDictionaries()
                                 orderby d.DisplayNamePlural
                                 select d;


        foreach (DictionaryInfo di in dictionaryDefs)
        {
            var newNode = new DynamicNode()
            {
                Title = di.DisplayNamePlural,
                Description = "Import " + di.DisplayNamePlural,
                ParentKey = "Import Records" 
            };

            newNode.Attributes.Add("entity",di.DictionaryName);

            yield return newNode;

        }
    }
.

Il mio nodo modello sembra (namespace e nomi di assemblaggio anonimizzati):

<mvcSiteMapNode title ="ToBeReplaced" route="CMS_EntityAction"   controller="ImportDictionary" action="Import"  crudlevel="Update" dynamicNodeProvider="NameSpace.INeedToImportDataNodeProvider, MyAssembly"/>
.

Ed ecco il percorso che ho specificato per questo usare:

routes.MapRoute(
            "CMS_EntityAction", // Route name
            "{controller}/{action}/{entity}",
            new { action = "Index", controller = "Grid", showCheckboxes = UrlParameter.Optional },
            new { controller = @"(Grid|ImportDictionary)" }              
            );
.

Si noti che il provider del nodo dinamico fornisce il valore entity, ma il controller e l'azione devono essere ereditati dal modello.

Tutto quello che ottengo per gli URL, però è "#", che da quello che posso dire a sfiorare la fonte, significa che l'urlresolver non ha potuto risolvere l'URL.

Se rimuovo il nome del percorso specifico dal nodo modello (route="CMS_EntityAction"), quindi generano di nuovo lo stesso URL per ciascun nodo che è /ImportDictionary/Import che manca il valore entity come il 3 ° segmento.

Ho provato a specificare il controller e l'azione nel fornitore del nodo dinamico anziché il modello e ottengo la stessa cosa, non userò il valore del entity nella creazione dell'URL.

Qualche idea di ciò che ho bisogno di cambiare, specificare o correggere? Grazie.

(Per favore non giudicarmi su quella cosa showcheckoxes, è fuori dalle mie mani :-))

È stato utile?

Soluzione

Il problema è che non si aggiunge l'aggiunta della "Entity" alla raccolta dei routevalue del nodo, ma si sta invece aggiungendolo agli attributi, rendendolo un valore di attributo personalizzato.Gli attributi personalizzati non vengono presi in considerazione quando si genera l'URL.

Se cambi:

newNode.Attributes.Add("entity",di.DictionaryName);
.

A:

newNode.RouteValues.Add("entity",di.DictionaryName);
.

Quindi l'argomento dell'entità verrà inserito nell'URL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top