views:

3151

answers:

5

Is there a client event that I can use for when a DropDownList's data has been loaded/bound onto the control? I need to trigger event on their side when this happens.

+1  A: 

Jason is correct here in that you cannot "notify" the client when such an event occurs. One thing you could do, is call the Page.RegisterStartupScript() method to do something with JavaScript once the page has finished loading (and assumedly that the post back that has done your databinding has occurred). Again, this assumes that you want to do something on the client side once the data binding is complete, as opposed to server side.

Dillie-O
+2  A: 

Since data will be bound on the server side, you don't have a client-side event for that specific event, however, one the page has rendered, the data will be there, so you may want to run your client script in the document.load event, or using something like jQuery's document.ready event. That will trigger your script to run once the page (including your bound drop down) is finished loading.

Andrew Van Slaars
A: 

Basically, I am trying to lock out the controls while the data is being loaded as if there is a slowdown (not uncommon) a user can start inputting data and then lose focus as they are typing.

I tried doing this in the tags but the methods located there seem to stop working after the first postback! (Any help there would be greatly appreciated). As a workaround I tried attaching the events to the elements themselves and while this works for locking, using the onchange event, I am unable to unlock it upon the data successfully loading!

Any ideas? Thanks for the answers so far :)

Damien
+1  A: 

Are you able to use ASP.NET AJAX in your application? If so, you can have the selected event open up a modal dialog in which you can display your "processing" text while you are populating the drop down list. That way the user does not have access to any other controls and you can do what you need without worry.

Dillie-O
Cheers, But I fixed it by using the $(document).ready() method. Changing triggers the blockUI method and when the postback is completed it gets unblocked :)
Damien
A: 

i use the following code in my master pages for my websites. This stops the user from attempting to use a control before its completely bound. I have found that if a control hasn't been completely bound (slow connections) then the page blows up.

Essentially the script hijacks the post back if that page isn't done. Allowing the user to not do anything until the page has finished processing. I wrote this a year ago and its come in very handy.

  1. first set the onload body tag to setdopostback()

  2. add this in a scrip block in the body.

        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);
        }       
    }