我想刷新页面上的标签而不重新加载页面。
该页面用于发送短信。因为我使用的是连接到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;
};
答案 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,也可以帮助你入门。