Question

Existe-t-il un événement client que je peux utiliser lorsque les données d'une liste DropDownList ont été chargées / liées sur le contrôle? Je dois déclencher un événement de leur côté lorsque cela se produit.

En gros, j'essaie de verrouiller les contrôles pendant le chargement des données, comme s'il y avait un ralentissement (pas rare), un utilisateur peut commencer à saisir des données puis perdre le focus au moment de la frappe.

J'ai essayé de faire cela dans les balises, mais les méthodes qui s'y trouvent semblent cesser de fonctionner après la première publication! (Toute aide serait grandement appréciée). En guise de solution de contournement, j’ai essayé de joindre les événements aux éléments eux-mêmes et, bien que cela fonctionne pour le verrouillage, en utilisant l’événement onchange, je ne parviens pas à le déverrouiller lors du chargement des données!

Des idées? Merci pour les réponses jusqu'ici :)

Était-ce utile?

La solution

Étant donné que les données seront liées côté serveur, vous n'avez pas d'événement côté client pour cet événement spécifique. Cependant, si la page a été rendue, les données seront là. Vous souhaiterez peut-être exécuter votre client. script dans l'événement document.load, ou en utilisant quelque chose comme l'événement document.ready de jQuery. Cela déclenchera l'exécution de votre script une fois le chargement de la page (y compris la liste déroulante liée) terminé.

Autres conseils

Jason a raison en ce sens que vous ne pouvez pas "notifier". le client lorsqu'un tel événement se produit. Une chose que vous pouvez faire est d’appeler la méthode Page.RegisterStartupScript () pour faire quelque chose avec JavaScript une fois le chargement de la page terminé (et supposons que la publication de retour qui a effectué votre liaison de données s’est produite). Encore une fois, cela suppose que vous souhaitiez faire quelque chose côté client une fois la liaison de données terminée, par opposition au côté serveur.

Pouvez-vous utiliser ASP.NET AJAX dans votre application? Si tel est le cas, vous pouvez faire en sorte que l'événement sélectionné ouvre une boîte de dialogue modale dans laquelle vous pouvez afficher votre "traitement". texte pendant que vous remplissez la liste déroulante. De cette façon, l'utilisateur n'a accès à aucun autre contrôle et vous pouvez faire ce dont vous avez besoin sans souci.

J'utilise le code suivant dans mes pages maîtres pour mes sites Web. Cela empêche l'utilisateur d'essayer d'utiliser un contrôle avant qu'il ne soit complètement lié. J'ai constaté que si un contrôle n'était pas complètement lié (connexions lentes), la page se gonflait.

Essentiellement, le script reprend la publication si cette page n’est pas terminée. Permettre à l'utilisateur de ne rien faire jusqu'à ce que le traitement de la page soit terminé. J'ai écrit cela il y a un an et sa mise en place est très pratique.

  1. commencez par définir la balise onload body sur setdopostback ()

  2. ajoutez ceci dans un bloc de script dans le corps.

        var boolDoPostBack = false;
    
        if (__doPostBack)
        {
           // save a reference to the original __doPostBack
           var __oldDoPostBack = __doPostBack;
    
          //replace __doPostBack with another function
          __doPostBack = AlwaysFireBeforeFormSubmit;
        }
        function setdopostback()
        {
            boolDoPostBack = true;
        }
        function AlwaysFireBeforeFormSubmit (eventTarget, eventArgument)
        {
            var x= document.readyState
    
            if (x != "complete")
            {
                if (x == "loading" || x == "interactive" || x == "unitialized" || x == "loaded")
                { 
                    //do nothing with IE postback
                }
                else if (!boolDoPostBack)
                {
                    //do nothing with FireFox postback
                }
                else
                {
                    //alert('Allow Postback 1');
                    return __oldDoPostBack (eventTarget, eventArgument);
                }
            }
            else
            {
                //alert('Allow Postback 2');
                return __oldDoPostBack (eventTarget, eventArgument);
            }       
        }
    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top