0

有人可以看看下面的代码并告诉我我做错了什么。

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)};
                    }   
4

3 回答 3

0

message是一个string值,它应该用单引号括起来"do_progress('"+message+"',"+percentComplete+");"

percentComplete包含integer所以它不需要像这样用单引号括起来message

string methods = string.empty;

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);

methods += "do_progress('"+message+"','"+percentComplete+"');"

}

其次,在这里,我将递增string变量中的所有方法并在window.onload事件中调用它,只需确保DOM在我们调用do_progress函数之前准备好。

ScriptManager.RegisterStartupScript(this, this.GetType(), "progress", @"window.onload = function() {"+ methods +"}", true);

但是,这不应该在这里要求,请在准备好window.onloadScriptManager.RegisterStartupScript调用它们。DOM

我不确定你到底有什么问题,但这是我的即时评论。

于 2009-12-17T07:45:56.360 回答
0

尝试使用 this.RegisterStartupScript 而不是 ScriptManager.RegisterStartupScript

于 2009-12-17T09:38:38.897 回答
0

您的客户端do_progress函数在 jQuery 选择器中似乎有错误 - 您当前正在寻找命名的元素progress_statusprogress_bar当我怀疑您打算寻找类或 ID 时。如果您的选择器不匹配任何内容,它不会引发任何类型的错误,它只是不做任何事情。

于 2014-01-15T04:36:54.030 回答