如何在不重新加载页面的情况下刷新标签

时间:2012-05-18 11:32:54

标签: c# .net refresh page-refresh

我想刷新页面上的标签而不重新加载页面。

该页面用于发送短信。因为我使用的是连接到COM端口的GSM调制解调器,所以每个文本大约需要3秒钟,这是一个非常缓慢的过程。 (我使用串行GSM调制解调器的原因很长,而不是在线服务或USB连接。)

可以指定多个号码,由";"分隔。我想在每个文本发送后立即更新页面;但目前它只是在最后一次更新标签。实现这一目标的最简单方法是什么?想法可能是AJAX,JavaScript或线程。 (正如我所说,简单就是好!)

当前代码:

SerialPort sp = new SerialPort("COM1", 115200, Parity.None, 8, StopBits.One);
        try
        {
            String[] numbers = tbNo.Text.Split(';');


            foreach (string n in numbers)
            {

                sp.Open();

                sp.Write("AT+CMGF=1" + (char)(13));

                Thread.Sleep(200);

                sp.Write("AT+CMGS=" + n.Replace(" ", string.Empty) + (char)(13));

                Thread.Sleep(200);

                sp.Write(tbMsg.Text + (char)(13) + (char)(26));

                Thread.Sleep(3000);

                sp.Close();

                Label1.Text = Label1.Text + "Message sent to " + n + "<br />";

            }

        } catch (Exception error) {

            Label1.Text = error.Message;
        };

2 个答案:

答案 0 :(得分:0)

最好的方法是在服务器端创建一个服务,如果你有ASP.net,它可以是一个WCF Rest服务,作为ajax调用向服务器发送一个post请求,并在收到结果更改时label text在javascript。

答案 1 :(得分:0)

你肯定想为此使用一些AJAX。实际上很容易实现的一种方法是使用SignalR

SignalR是一个支持客户端和服务器之间实时连接的框架。这使您的代码更容易。如果你不使用SignalR,你必须手动实现类似轮询的东西(客户端浏览器每隔X秒询问服务器你的任务状态是什么)或者有一些变化。

SignalR隐藏使用的基础机制,并在服务器和客户端之间创建连接。

服务器上的代码如下所示:

public class SmsHub : Hub
{
   public Task SendMessages(string input)
   {
      // ... send sms message

     Caller.updateStatus('Message send!');
   }
}

在您的客户端上,您将使用javascript集线器发送和接收消息。 updateStatus函数可以将HTML消息附加到某个信息div。

这是Scott Hanselman的一个很好的blog post,也可以帮助你入门。