I have caused a postback loop using javascript onload to fire an updateprogress image
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开发者_JAVA百科 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:
function pageLoad() {
var loading = $("#treeview-loading"); // Using jQuery to find the loading indicator.
if (loading.get(0)) {
__doPostBack('btnBuildTree', '');
}
}
How are you adding the js for pageload?
If this is added on Page_Load
using RegisterStartupScript
or similiar, add a !IsPostBack
check so that it will not re-add itself everyime the btnBuildTree_Click eventhandler is called.
精彩评论