beginning page load immediately on postback with a long load time ?

M

Mad Scientist Jr

i have a dropdown control with autopostback=on that when selected,
posts back and populates a second dropdown. the 2nd dropdown takes a
while to load, giving the user time to start typing in other fields
before the screen refreshes. i would like to disable any user input
during this time.

I was thinking if it was possible to force the browser to begin
loading the page immediately that it would erase the controls that are
there and the user would be forced to wait (wouldn't be able to press
any buttons, type in any textboxes etc) for the page to refresh.

I started playing around with Response.Buffer/Flush but it didn't
work. Any ideas on if this is possible and if so how to get it to
work?

Thanks

Sample code:

Private Sub Dropdown1_SelectedIndexChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
cboBroker_Alpha.SelectedIndexChanged
' CLEAR PAGE SO USER DOESN'T HAVE TIME TO WAIT AROUND AND START
TYPING IN OTHER CONTROLS
Response.Buffer = True
Response.Flush()
(CODE THAT TAKES A LONG TIME TO RUN HERE...)
 
J

John Saunders

Mad Scientist Jr said:
i have a dropdown control with autopostback=on that when selected,
posts back and populates a second dropdown. the 2nd dropdown takes a
while to load, giving the user time to start typing in other fields
before the screen refreshes. i would like to disable any user input
during this time.

I was thinking if it was possible to force the browser to begin
loading the page immediately that it would erase the controls that are
there and the user would be forced to wait (wouldn't be able to press
any buttons, type in any textboxes etc) for the page to refresh.

I started playing around with Response.Buffer/Flush but it didn't
work. Any ideas on if this is possible and if so how to get it to
work?

The problem is something like this:

1, User requests page.aspx
2. Server sends back html for page.aspx, including your dropdown with
autopostback on.
3. User changes selection in dropdown.
4. Page posts back to the server
5. User starts typing into the html sent back in 2.
6. Server sends back html for posted-back page.aspx, including your loaded
second dropdown, overwriting whatever the user had typed.

So you see, what you would need to do is disable the controls on the page
just before the postback begins. When the new html comes back, it will come
back with enabled controls.

This will take a bit of JavaScript in the onchange event of the dropdown.
That script would have to run through the DOM and set the disabled property
of all relevant objects to true.

Now, I can't get you an example. I needed to do this in a control once, and
had a bit of trouble with it. Only certain objects in the DOM implement the
disabled property. Also, in some cases, setting the disabled property will
disable all contained objects, but sometimes it won't and you'll have to
iterate into the child objects. Also, I seem to remember that under some
circumstances, I couldn't entirely disable an anchor object, and had to
screw with the URL instead.

Of course, another option would be to follow one of the various strategies
for producing a "Waiting..." page.
 
B

bruce barker

you also have to control the timing of the disable to happen after postback
as disabled fields are not posted by the browser. dropdown with autopostback
also will have problems if the user uses arrow keys to access the dropdown
values (tries to post on every selection)

-- bruce (sqlwork.com)
 
E

Emma Gumbdough

4. Page posts back to the server

What I want to do is for the page to post some whitespace back to the
server, say a single space character, so the page in the user's browser
is temporarily blanked out, so they can't type anything. Then when the
server is done processing, it sends the postback page. Is that possible?


*** Sent via Devdex http://www.devdex.com ***
Don't just participate in USENET...get rewarded for it!
 
J

John Saunders

Emma Gumbdough said:
What I want to do is for the page to post some whitespace back to the
server, say a single space character, so the page in the user's browser
is temporarily blanked out, so they can't type anything. Then when the
server is done processing, it sends the postback page. Is that possible?

Actually, no, it doesn't even make sense. The "page", in the users browser,
posts form data back to the server. The server then sends HTML back in
response.

See
Indicating Progress
http://msdn.microsoft.com/library/d...serverprogressfromaspnetclientapplication.asp
for some examples on progress.
 
E

Emma Gumbdough

Yes. And when the page posts back, the codebehind BEGINS rendering the
postback page, and flushes the buffer (which would contain some
whitespace or maybe the header). The client then has a partial response
in their browser (this will probably appear as a blank screen) and thus
cannot type in any fields until the entire page loads. The server then
continues to process and sends the remaining response to the client, at
which point they can type again.




*** Sent via Devdex http://www.devdex.com ***
Don't just participate in USENET...get rewarded for it!
 
J

John Saunders

Emma Gumbdough said:
Yes. And when the page posts back, the codebehind BEGINS rendering the
postback page, and flushes the buffer (which would contain some
whitespace or maybe the header). The client then has a partial response
in their browser (this will probably appear as a blank screen) and thus
cannot type in any fields until the entire page loads. The server then
continues to process and sends the remaining response to the client, at
which point they can type again.

I wouldn't count on TCP/IP to be deterministic, even in the presence of a
Flush call. If you want to make sure they don't type anything, you need to
handle it on the client. You don't even have control over how much time
passes after the user changes selection in the dropdown and before Page_Load
starts.
 
E

Emma Gumbdough

I ended up just putting the slow dropdowns on a different screen.

The 'waiting' page idea sounded good but how would it be implemented -
as a popup? Can the main page be given a RegisterStartupScript or
register client side script that would be able to automatically close
the popup (assuming it is a child of that browser) upon completion of
loading?
you also have to control the timing of the disable to happen after
postback as disabled fields are not posted by the browser



*** Sent via Devdex http://www.devdex.com ***
Don't just participate in USENET...get rewarded for it!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,774
Messages
2,569,596
Members
45,128
Latest member
ElwoodPhil
Top