1

如何在方法运行时更新 aspx 页面中的标签?也许使用 AJAX(更新面板)?

private void button_Click(object sender, EventArgs e)
{
    doThings1();
    label.Text = "Status1";
    doThings2();
    label.Text = "Status2";
    doThings3();
    label.Text = "Done";  
}

我想一步一步地展示。当doThings1()完成时方法正在运行,显示“Status1”,doThings2()完成,显示“Status2”......这样,标签不会显示“Status1”和“Status2”,只是过程完成时“完成”。我想一步一步地展示。

4

3 回答 3

2

这不是一件容易的事,就像在桌面应用程序中一样。您需要启动一个异步操作,该操作将在请求结束后继续,您需要让客户端不断轮询服务器以获取有关进度的更新,并且服务器端异步代码将需要更新某种共享状态(即会话、数据库、视图状态等),轮询方法可以从中读取进度。到处都是非常低效的(特别是如果你有很多用户这样做)并且需要一些时间来编写。 是 MSDN 上的一个示例,它可以让您了解所涉及的内容。

于 2013-03-11T15:33:10.040 回答
0

听起来您想显示在​​服务器上运行的某些任务的进度。Signalr库将允许您从服务器向客户发送实时更新。因此,只要任务完成了任务的一个阶段(Status1、Status2 等),它就会向侦听客户端发送具有新状态的更新。

您还可以让一些 javascript 每隔几秒钟从服务器请求任务状态并将其显示给用户。

于 2013-03-11T15:24:15.020 回答
0

规则是:1 个请求 --> 一个响应。不同的方法:您可以使用 3 个异步 javascript 调用执行这些方法,并在成功回调中设置标签的文本。

http://api.jquery.com/jQuery.ajax/

例子:

$.ajax({
    type: "POST",
    url: "URL.asmx/doThings1",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(result) {
            // result will be "done" from the function of webservice below.
        // set the first label text
    },
    error: function(xmlHttpRequest, status, err) {
        alert(xmlHttpRequest.statusText + " " + xmlHttpRequest.status + " : " + xmlHttpRequest.responseText);
    }

});

重复这些调用 3 次,并在不同的函数中进行修改。您可以使用 jquery 或纯 javascript 在客户端处理您的 buttonclick。

您可以使用 Web 服务或通用处理程序来执行服务器端方法。

如何创建网络服务

[WebMethod]
    public string doThings1()
    {
        return "done";
    }
于 2013-03-11T15:31:56.410 回答