10
votes

Dropdownlist dans UpdatePanel

Dans mon projet, j'ai placé une liste déroulante dans un UpdatePanel.Quelle que je voulais faire est de sélectionner une valeur de Dropdownlist et de l'utiliser dans une session.

Mais quoi que je fasse, cela me donnera toujours une valeur null à cause de ne pas vérifier "Activer AutoPostback". Et quand je le ferai, il rafraîchira la page de sorte que ce n'est pas ce que je voulais.


0 commentaires

4 Réponses :


3
votes

Pour obtenir n'importe quoi stocké à la session, vous devez le soumettre au serveur.

Peut-être encore plus de détails sur la raison pour laquelle vous ne voulez pas que le rafraîchissement de l'UpdatePanel serait utile et ce que vous essayez d'accomplir en utilisant la valeur en session.

Edit: en fonction de vos commentaires, il me semble que la solution consisterait à stocker le fichier actuel .ascx en session et définir votre liste déroulante pour avoir activé AutoPostback.

Donc, sur votre manutention des boutons "Suivant" et "Back", stockez un indicateur pour le bon .ascx à la session.

Au cours de votre manipulation de publication de l'événement DropdownList, vous pouvez simplement vous assurer que le fichier actuel .ascx est toujours affiché, en vérifiant la session du fichier correct à afficher. Lorsque le résultat est renvoyé au client, rien ne semblera avoir changé, car l'UpdatePanel est suffisamment intelligente pour se rendre compte que c'est le même contenu, et vous aurez avec succès la valeur DropdownList.


2 commentaires

Eh bien, j'ai créé un sorcier comme structure.Et son très compliqué en fait .mais laissez-moi vous dire ceci.J'ai 7 .ascx fichier et dans mon fichier par défaut.aspx il y a scriptmanager et updatepanel.in My UpdatePalel à l'aide des boutons suivants et arrière J'appelle ces fichiers .ascx de manière dynamique de manière dynamique, il donne une vue de type assistant.Si I Autopostback My Dropdownlist Il redeviendra au 1er WebusControl nommé page1.ascx. ce n'est pas acceptable pour moi.Im essayant de trouver une solution mais ne pouvait pas trouver encore


et en utilisant la session im planifiant pour stocker des variables globales à utiliser dans d'autres fichiers .ascx.



1
votes

On dirait que vous allez bien faire plus de travail que vous n'avez besoin ici. Avez-vous examiné à l'aide d'un contrôle de l'assistant ASP.NET? http://msdn.microsoft.com/en-us/magazine/cc163894. Aspx ou juste Google It.

Si vous voulez toujours le faire votre chemin, vous avez à soumettre au serveur (sans bouton d'autopostback + manual Soumettre clic, ou en activant Autopostback) car la session est un serveur. Concept latéral. HTTP est un protocole apatride, le seul concept d'état doit être effectué en dehors du domaine HTTP. Cela signifie que vous êtes bloqué Stockage State sur le serveur (par exemple, dans la session) ou, beaucoup plus restrictivement, sur l'ordinateur du client (comme dans un cookie).


0 commentaires

26
votes

On dirait que vous ne pouvez pas utiliser correctement la fonctionnalité UpdatePanel. Si vous avez la mise à jour de UpdatePanel pour mettre à jour lorsque les enfants incendient des événements, seuls l'UpdatePanel doit actualiser, et non la page entière. Le code ci-dessous semble se comporter de manière similaire à ce que vous recherchez. Lors de la modification de la liste déroulante, seul le panneau de mise à jour enregistre sur le serveur et lorsque vous actualisez la page, vous pouvez obtenir la valeur de la session.

code ASPX strong> p>

    protected void Page_Load(object sender, EventArgs e)
    {
        this.lblTime.Text = DateTime.Now.ToShortTimeString();
        if (Session["MyValue"] != null) 
            this.lblSessionValue.Text = Session["MyValue"].ToString();
    }

    protected void ddlMyList_SelectedIndexChanged(object sender, EventArgs e)
    {
        Session.Remove("MyValue");
        Session.Add("MyValue", this.ddlMyList.SelectedValue);
    }


2 commentaires

oke maintenant j'ai trouvé un moyen de résoudre ce problème, je pense que j'ai dit que j'ai appelé de manière dynamique 7 fichiers ASCX dans une UPDOWPANEL.Si j'utilise si (ispostback) alors ... fin si peut-être que je peux le faire fonctionner


J'ajoute généralement que l'IF (ispostback) vérifie autour de mes fonctions de la page de la page et de la page des fonctions d'init de la page s'ils ont un contenu ...



1
votes

Merci beaucoup j'ai résolu le problème en contrôlant des variables dans la page_load événement.

If Label1.Text = 1 Then
    Dim tempcontrol2 As Control = LoadControl("Page1.ascx")
    PlaceHolder1.Controls.Add(tempcontrol2)

ElseIf Label1.Text = 2 Then
    Dim tempcontrol2 As Control = LoadControl("Page2.ascx")
    PlaceHolder1.Controls.Add(tempcontrol2)
End If


0 commentaires