有人可以看看下面的代码并告诉我我做错了什么。
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”的函数,它接受两个参数:消息和百分比。我的意图是每次循环都会触发客户端方法,但没有任何反应。
更新
谢谢你的帮助。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)};
}