更新面板,Update方法不会更新Control

时间:2012-05-15 10:32:22

标签: asp.net ajax updatepanel

我有一个转发器形成一个Html表。预览大概如下:

| No |    Name   |    Status   |
--------------------------------
| 1. | Process A | In Progress |
| 2. | Process B | In Progress |
| 3. | Process C | In Progress |
| 4. | Process D | In Progress |
...
| n. | Process N | In Progress |
--------------------------------

我将转发器放在更新面板中。

单击按钮时,表单将调用此类发送过程功能。 该函数将循环显示每一行,并将状态文本从“正在进行”设置为“已发送”。 假设该过程约为2秒 我想在分配状态文本后通过UpdatePanel.Update()更新Repeater中的状态文本,但我的问题是状态不会更新。 功能完成后会更新。

发送功能如下:

protected void btnSend_Clicked(object sender, EventArgs e) 
    {
        foreach (RepeaterItem item in rptData.Items) 
        {
            UpdatePanel upnlStatus = (UpdatePanel)item.FindControl("upnlStatus");
            Literal litStatus = (Literal)item.FindControl("litStatus");
            System.Threading.Thread.Sleep(2000);
            litStatusText = "Sent";
            upnlStatus.Update();                
        }
    }

我的问题是做这件事的最佳方法是什么? 更新面板是否支持这种实时更新?提前谢谢。

1 个答案:

答案 0 :(得分:0)

更新面板的AsyncPostback模式为

  1. 客户提出请求
  2. 服务器执行任务
  3. 客户端已更新
  4. 因此,在执行3之前等待2完成。您无法在服务器上执行任务时触发客户端更新,因为服务器进程在每个AsyncPostback之间不再存在于服务器上。从每个AsyncPostback之间的视图状态重新创建整个页面。

    要执行您想要执行的操作,您需要异步启动任务并稍后检索结果。必须采用的常见方法是使用Web Service。另请查看this