有人可以看看下面的代码,并告诉我,我做错了。
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”采用两个参数功能:消息和百分比。 我的本意是,客户端的方法触发与每个循环过程,但没有任何反应。
UPDATE
谢谢你的帮助。 拉米兹,你的代码将不会在我的情况下工作,因为它收集所有内循环的方法(和进度),然后将它们发送给客户端在同一时间。 这将不能准确地显示进度(每个循环代表一个上载的文件的完成)。 我需要访问客户端功能,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,该值已经更新。 很奇怪。 这几乎就像我需要刷新页面或东西但should't是必要的。
客户端的功能,我使用,这是摆在表单标签页面的末尾,如下所示:
function do_progress(message,percent)
{
try {
$('progress_status').innerHTML = message;
$('progress_bar').attr("style", percent + "px");
}catch(e){alert(e.message)};
}