I have an asp.net page that needs to populate a treeview based on a directory structure. Rather than have the user stare at a blank page while creating the nodes I am trying to use UpdateProgress for a loading image.
Searching through various threads on the internet has given me a couple of different things I have tried, both of which have their own issues that I can’t seem to resolve.
Option 1 uses the following javascript:
function pageLoad() {
__doPostBack('btnBuildTree', '');
}
This event is auto wired up and so I don’t need to add an onload tag to the body element.
For testing my code behind looks like this:
protected void btnBuildTree_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(5000);
// minor code here to know it did something
}
When I have it set up like this, the page loads, the update progress executes just as I want, and when btnBuildTree_Click finishes the UpdatePanel refreshes and everything is great, except it immediately kicks off another postback, fires the javascript pageLoad() function, which causes the btnBuildTree to postback, and so on.
Option 2 only has one change and that is to the javascript:
function buildTree() {
__doPostBack('btnBuildTree', '');
}
And I add this tag:
<body onload="buildTree()">
With this set up, the page loads, the btnBuildTree_Click event fires and does all of its work, and when it is finished, it does not cause another postback so I have no loop. The only drawback to this is the UpdateProgress never shows so it defeats the whole purpose of trying to give them a ‘loading screen.’
I believe that I am simply missing something and I hope someone can point out what it is.
Thank you!
Your pageLoad() function is called for all postbacks, including asynchronous postbacks. In the pageLoad() function you can add a logic to tell if the treeview has been displayed.
Assuming you will remove the loading indicator after the treeview is displayed, you can do something like: