【问题标题】:Update Panel, Update method won't update a Control更新面板,更新方法不会更新控件
【发布时间】:2012-05-15 10:32:22
【问题描述】:

我有一个形成为 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() 更新中继器中的状态文本,但我的问题是状态不会更新。 函数完成后更新。

发送函数是这样的:

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

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

【问题讨论】:

    标签: asp.net ajax updatepanel


    【解决方案1】:

    更新面板的 AsyncPostback 的模式是

    1. 客户端提出请求
    2. 服务器执行任务
    3. 客户端已更新

    所以,它在执行 3 之前等待 2 完成。您无法通过在服务器上执行任务来触发客户端更新,因为服务器进程在每个 AsyncPostback 之间不再存在于服务器上。整个页面是从每个 AsyncPostback 之间的视图状态重新创建的。

    要做你想做的事,你需要异步启动任务并稍后检索结果。这样做的常用方法是使用Web Service。还要检查this

    【讨论】:

    • 谢谢@DavRob60 :) 但是没有 WebService 是否可以做到这一点?我听说过 C# 中的异步方法。我可以通过 C# 异步服务器方法进行此部分渲染吗?谢谢
    • @WillyLazardi 这是一个巨大的简化,但“异步服务器方法”是 Web 服务的一部分。详细解释需要很长时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 2014-01-28
    • 1970-01-01
    相关资源
    最近更新 更多