2010-07-22 6 views
0

I ont un contrôle utilisateur personnalisé un peu complexe, créé en C# .NET, qui est essentiellement une structure arborescente. Le contrôle, ctlGroup, contient une liste de champs (qui sont également des contrôles utilisateur personnalisés - ctlFields) et une liste de groupes enfants. Le datalist contenant les groupes d'enfants crée de nouvelles instances du même contrôle ctlGroup, parce que chacun des enfants peuvent avoir une liste de champs et une liste des enfants, et ainsi de suite. Ouf.Maintenir les paramètres de visibilité par le biais de la persistance dans les contrôles créés dynamiquement

Le nombre d'enfants de chaque groupe peut avoir est fini, et chaque groupe d'enfants est une entrée dans une base de données, récursion infinie est impossible. Les contrôles sont bien créés et affichés correctement, jusqu'à ce qu'un post-retour se produise. J'ai été en mesure de conserver toutes les données relatives à chaque contrôle créé de manière dynamique lors de la publication, à une exception près. La partie avec laquelle je suis en difficulté consiste à maintenir la visibilité de certains panneaux sur les commandes par le biais de la publication. Chaque groupe d'enfants possède un bouton qui se dilate et réduit une partie du corps. Je peux effondrer cette partie une fois, mais dès que je clique sur le bouton nouveau (à savoir provoquer une postback), le contrôle est conservé et il est précédent paramètre de visibilité est perdue.

me semble être aux prises avec venir avec un moyen de stocker ces informations. J'ai essayé d'enregistrer l'état de la visibilité dans le viewstate, mais il semble que cette information ne se répète pas lorsque le contrôle est recréé.

Est-ce que quelqu'un a des idées sur la façon de le faire? Est-ce que je manque quelque chose?

edit: Je devrais préciser que les contrôles ctlGroup qui sont créés dans le datalist sont créés dynamiquement car ce sont des appels récursifs. Je ne connais pas d'autre moyen d'appeler un contrôle de lui-même, mais si c'est un meilleur moyen, j'aimerais l'entendre.

Répondre

0

Ma suggestion:

magasin les ID d'options élargies "dans" un champ caché. Ils pourraient aussi avoir des liens récursifs avec des enfants élargis. Ce serait votre structure arborescente "nœuds étendus". En JSON il ressemblerait à ceci (stocké sous forme de chaîne dans le champ caché):

[{ 
    id: "root1", 
    children: [{id: "sub-root1", children: []}, {id: "sub-root2", children: []}] 
}, 
{ 
    id: "root2", 
    children: [] 
}] 

Puis postback, attach un gestionnaire sur l'événement document.load ($addHandler(document, "load", function(){ ... }) qui parse JSON de votre champ caché. Lorsque l'itérateur visite un nœud étendu, il "clique" sur le bouton de développement réel (appelez le .click() sur l'élément trouvé). Cela permettrait de reconstruire la structure "élargie".

HTH

+0

Intéressant, je vais essayer ça. Merci. –

+0

@Heap - N'oubliez pas de marquer le message comme "accepté" si c'est le chemin que vous prenez. Cela aide les autres à chercher le même sujet. – TheCloudlessSky

Questions connexes