有人可以看下面的代碼並告訴我我做錯了什麼。由ScriptManager.RegisterStartupScript調用的客戶端方法不能觸發
for(i=0;i<=Request.Files.Count;i++)
{
int percentComplete = (int)Math.Ceiling((double)(i + 1)/(double)Request.Files.Count * 100);
string message = string.Format("{0} of {1} uploaded", i + 1, Request.Files.Count);
ScriptManager.RegisterStartupScript(this, this.GetType(), "progress", @"do_progress("+message+","+percentComplete+");", true);
}
我正在嘗試每次循環更新客戶端。在客戶端(在表單標籤內),我有一個名爲「do_progress」的函數,它帶有兩個參數:message和percent。我的意圖是,客戶端方法隨着循環的每個循環而激發,但沒有任何反應。
UPDATE
感謝您的幫助。 Ramiz,你的代碼在我的情況下不起作用,因爲它收集循環內的所有方法(和進度),然後同時將它們發送給客戶端。 這不會準確顯示進度(每個循環代表已上傳文件的完成情況)。我需要在服務器端循環的每次唯一完成之後訪問客戶端函數do_progress。
此外,頁面已經加載,並在單擊(上傳)按鈕時的代碼被激發。
話雖如此,我仍然有問題。我可以證實,我通過看「選擇來源」得到我想用下面的代碼的結果:
int percentComplete = (int)Math.Ceiling((double)(i + 1)/(double)Request.Files.Count * 100);
string message = string.Format("{0} of {1} uploaded", i + 1, Request.Files.Count);
ScriptManager.RegisterStartupScript(this, this.GetType(), "progress" + i, @"do_progress('" + message + "','" + percentComplete + "');", true);
但是,我沒有看到實時的客戶端上的結果更新。進度條不移動,計數器(n個文件中的n個)沒有任何操作。但是,當我看着innerHTML時,值已經更新了。很奇怪。這幾乎就像我需要刷新頁面或其他東西,但這不應該是必要的。
客戶端功能我用的,這是擺在表單標籤頁面的最後,是這樣的:
function do_progress(message,percent)
{
try {
$('progress_status').innerHTML = message;
$('progress_bar').attr("style", percent + "px");
}catch(e){alert(e.message)};
}
嘗試RegisterClientScriptBlock而不是RegisterStartupScript – 2009-12-17 07:39:20
無論你是要在頁面加載或點擊事件... – 2009-12-17 07:44:08