Domanda

Esiste un evento client che posso usare quando i dati di un DropDownList sono stati caricati / associati al controllo? Ho bisogno di innescare un evento dalla loro parte quando questo accade.


Fondamentalmente, sto provando a bloccare i controlli mentre i dati vengono caricati come se ci fosse un rallentamento (non raro) un utente può iniziare a inserire i dati e quindi perdere lo stato attivo durante la digitazione.

Ho provato a farlo nei tag ma i metodi che si trovano lì sembrano smettere di funzionare dopo il primo postback! (Qualsiasi aiuto lì sarebbe molto apprezzato). Per ovviare al problema, ho provato ad associare gli eventi agli elementi stessi e mentre questo funziona per il blocco, usando l'evento onchange, non riesco a sbloccarlo dopo il caricamento corretto dei dati!

Qualche idea? Grazie per le risposte finora :)

È stato utile?

Soluzione

Poiché i dati saranno associati sul lato server, non si dispone di un evento sul lato client per quello specifico evento, tuttavia, uno ha reso la pagina, i dati saranno lì, quindi potresti voler eseguire il tuo client script nell'evento document.load o usando qualcosa come l'evento document.ready di jQuery. Ciò attiverà l'esecuzione dello script una volta terminato il caricamento della pagina (incluso il menu a discesa associato).

Altri suggerimenti

Jason ha ragione qui in quanto non puoi " notificare " il client quando si verifica un evento del genere. Una cosa che potresti fare è chiamare il metodo Page.RegisterStartupScript () per fare qualcosa con JavaScript al termine del caricamento della pagina (e presumibilmente si sia verificato il post che ha eseguito il tuo databinding). Ancora una volta, ciò presuppone che tu voglia fare qualcosa sul lato client una volta completata l'associazione dei dati, al contrario del lato server.

Sei in grado di utilizzare ASP.NET AJAX nella tua applicazione? In tal caso, puoi fare in modo che l'evento selezionato apra una finestra di dialogo modale in cui puoi visualizzare la tua "elaborazione" testo mentre si popola l'elenco a discesa. In questo modo l'utente non ha accesso ad altri controlli e puoi fare ciò di cui hai bisogno senza preoccupazioni.

Uso il seguente codice nelle mie pagine master per i miei siti Web. Ciò impedisce all'utente di tentare di utilizzare un controllo prima che sia completamente associato. Ho scoperto che se un controllo non è stato completamente associato (connessioni lente) la pagina esplode.

In sostanza lo script dirotta il post se quella pagina non è stata eseguita. Consentire all'utente di non fare nulla fino al termine dell'elaborazione della pagina. L'ho scritto un anno fa ed è molto utile.

  1. prima imposta il tag body onload su setdopostback ()

  2. aggiungilo in uno scrip block nel corpo.

        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);
            }       
        }
    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top