Question

J'ai créé une liste déroulante via un service Web utilisant ASP> NET AJAX. Lors du rappel de succès de la méthode en javascript, je renseigne le menu déroulant via une boucle:

function populateDropDown(dropdownId, list, enable, showCount) {
    var dropdown = $get(dropdownId);
    dropdown.options.length = 1;    
    for (var i = 0; i < list.length; i++) {
        var opt = document.createElement("option");
        if (showCount) {
            opt.text = list[i].Name + ' (' + list[i].ChildCount + ')';
        } else {
            opt.text = list[i].Name;
        }
        opt.value = list[i].Name;
        dropdown.options.add(opt);
    }
    dropdown.disabled = !enable;    
}

Toutefois, lorsque je soumets le formulaire indiquant que ce contrôle est activé, la liste du contrôle est toujours vide à la publication. Comment faire en sorte que les données des listes remplies persistent sur la publication?

Modifier: J'arrive peut-être en arrière. Une meilleure question serait probablement, comment puis-je remplir une liste déroulante à partir d'un service Web sans avoir à utiliser un panneau de mise à jour en raison du cycle de vie complet de la page qu'il doit parcourir?

Était-ce utile?

La solution

Bien que je ne sois pas vraiment sûr de la manière dont cela se passe, CascadingDropDown dans AJAX Control Toolkit prend en charge cette fonctionnalité.

C'est la ligne qui semble le faire:

AjaxControlToolkit.CascadingDropDownBehavior.callBaseMethod(this, 'set_ClientState', [ this._selectedValue+':::'+text ]);

Mais l'idée la plus simple serait de placer la valeur sélectionnée dans un champ de saisie masqué pour l'événement de publication (postback).

Autres conseils

Vous devez utiliser Request.Form pour cela - vous ne pouvez pas chiffrer ViewState à la volée à partir du client - cela irait à l'encontre de son objectif:).

Modifier: en réponse à votre modification :), le cycle de vie d'une page est ce qui vous permet d'utiliser la persistance ViewState en premier lieu. L'arborescence de contrôle est gérée là-bas et, eh bien, il n'y a pas moyen de la contourner.

Request.Form est un moyen parfaitement viable de le faire - il vous indiquera la valeur de la sélection. Si vous souhaitez connaître toutes les valeurs, vous pouvez effectuer un type de sérialisation sur un contrôle caché.

Moche, oui, mais c’est pour ça que Dieu (certains l’appellent ScottGu) a inventé ASP.NET MVC:).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top