我有以下aspx页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="index" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblStatus" runat="server" Text="Label">
</asp:Label><asp:Button ID="btnRun" runat="server" Text="Button" onclick="btnRun_Click" />
</div>
</form>
</body>
</html>
代码隐藏是:
public partial class index : System.Web.UI.Page
{
protected void btnRun_Click(object sender, EventArgs e)
{
CP CPObj = new CP();
lblStatus.Text = "Starting process..";
CPObj.run();
lblStatus.Text = "Process done.";
}
}
班级需要做一些工作(大约一分钟)。 单击按钮时,标签不会更改,只有在类完成作业后,标签才会更改为“已完成处理”。
我已经找了很长时间的解决方案,但找不到明确而直截了当的答案。
我试图将该类作为一个线程运行并获得相同的结果。
public partial class index : System.Web.UI.Page
{
protected void btnRun_Click(object sender, EventArgs e)
{
CP CPObj = new CP();
Thread oThread = new Thread(new ThreadStart(CPObj.run));
lblStatus.Text = "Starting process..";
oThread.Start();
while (!oThread.IsAlive) ;
while (oThread.IsAlive)
{
Thread.Sleep(1000);
}
lblStatus.Text = "Process done.";
}
}
使用JavaScript似乎有问题,因为我已经有一个onClick调用(不确定我在这里是否正确)。
我真的很感激回应。
谢谢! Nadav
答案 0 :(得分:1)
网页与传统的网页形式不同。
您无法将标签设置为某个值,然后在同一个回调中将该值更改为其他值并同时显示。
你需要做的是使用一些ajax。简单的方法是添加更新面板并走这条路线。基本上,您可以通过javascript将标签设置为“启动过程...”,然后让面板在回调完成后更改标签。
或者,可以在没有ajax的情况下执行此操作;但是你再次通过一些javascript设置标签。然后让你的回调例程写下来。
答案 1 :(得分:0)
我认为您需要了解页面生命周期。很高兴您正在更新您的标签,但由于这是Web,因此在所有代码运行之前,您的数据将不会返回浏览器。因此,您无法更新尚未发送到浏览器的页面上尚未存在的标签;)
我认为JS是您的解决方案(不是该领域的专家)或者可能是一些将查询进程运行时的ajax,以及在另一个线程上运行的进程?