有人可以看下面的代码并告诉我我做错了什么。由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