通过ScriptManager.RegisterStartupScript名为Client方法不点火

2019-10-30 03:04发布

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

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

Answer 1:

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.onload作为ScriptManager.RegisterStartupScript会打电话给他们当DOM准备好。

我不知道究竟是什么问题,你的终点,而是这是我的即时审查。



Answer 2:

尝试使用this.RegisterStartupScript代替ScriptManager.RegisterStartupScript



Answer 3:

你的客户端do_progress功能似乎都在jQuery选择一个错误-你目前正在寻找命名的元素 progress_statusprogress_bar时,我怀疑你打算寻找类或ID。 如果您选择不匹配任何它不会引发任何类型的错误,它只是没有做任何事情。



文章来源: Client method called by ScriptManager.RegisterStartupScript not firing