2010-11-04 5 views
1

Problème: page de contenu avec contrôle de l'Assistant avec UpdatePanel et espace réservé. Au-dessus du UpdatePanel est un DropDownList. J'ai besoin d'afficher différents contrôles d'entrée sous la liste déroulante lorsque l'utilisateur change la sélection dans la liste déroulante. Lorsque l'utilisateur clique sur "Suivant" dans le contrôle de l'assistant, je dois également pouvoir extraire les données de ces contrôles dynamiques.Modification des contrôles dynamiques via DropDownList sur la page de contenu

Je sais que tous les contrôles dynamiques doivent être créés dans la méthode OnInit afin de récupérer les données de ces contrôles pendant la publication. Cependant, lorsque l'événement SelectedIndexChanged de la liste déroulante est déclenché, la méthode OnInit est appelée ... puis le chargement de page ... et enfin le gestionnaire de l'événement SelectedIndexChanged est appelé. ViewState n'a pas été restauré tant que les méthodes OnInit & OnLit ont été appelées, il n'y a donc aucun moyen de savoir ce que l'utilisateur a choisi dans la liste au moment où OnInit est appelée ... ce qui est exactement quand je dois créer les contrôles dynamiques.

Alors ... comment résolvez-vous ce problème? Avez-vous juste à écrire la page entière, ou la plus grande partie, en utilisant JavaScript?

Merci d'avance.

Répondre

0

J'ai tendance à utiliser une méthode old school pour ce type d'exigence. J'écrirais tous les contrôles nécessaires dans le panneau de mise à jour, avec leur propriété Visible définie sur false. Ensuite, lors de la publication, lisez l'état de la liste déroulante et définissez la propriété Visible des contrôles appropriés sur true. De cette façon, il n'y a pas de contrôles "dynamiques", et du fait que les contrôles dont la propriété Visible est false ne sont pas rendus, ils ne sont pas téléchargés tant que l'utilisateur ne les voit pas.

+0

Merci David. Je pensais que j'avais essayé cela et que ça ne fonctionnait pas (j'avais tort). Une chose (pour moi) à garder à l'esprit est que si vous utilisez les contrôles utilisateur pour passer dans l'espace réservé du panneau de mise à jour et que le contrôle utilisateur a des contrôles qui provoquent des publications, le contrôle utilisateur sera masqué. Le gestionnaire d'événements ne sera pas appelé car il n'a pas causé le retour. J'ai travaillé autour de ce problème en demandant à tous mes contrôles utilisateur enfant d'exposer un événement public qu'il déclencherait lorsque cela provoquerait une publication indiquant à la page parent de "masquer" l'espace réservé approprié. –

0

Vous pouvez également utiliser un asp: hiddenfield et définir la valeur d'une variable var que vous créez mentalement. puis exécutez un petit script jQuery sur le dessus pour regarder

$(document).on("change", "#ddlSelector", setControls); 

puis juste faire une fonction, par exemple:

function setControls(event) { 
    event.preventDefault(); 
    var selector = hiddenfield.val(); 
} 

alors un élément pour afficher/cacher peut être fait avec obtenir le tag:

$("#elementName").css("display", "inline"); 

ou d'afficher, aucun à masquer. Je l'ai utilisé au travail parce que parfois vous devez changer sans déclencher la publication, mais toujours collecter des données quand ils engagent le formulaire.

J'évite généralement jQuery pour de nombreux événements pour la force du code et la sécurité, mais la manipulation des éléments DOM peut parfois être beaucoup plus facile avec jQuery.

Questions connexes