[英]update textbox from code behind
我正在將應用程序轉換為ASP.NET網站。 該頁面的工作方式是,用戶在框中放入計算機列表,然后單擊“開始”,遍歷該列表運行檢查,並將狀態和結果輸出到左側的文本框中。 另外,它在運行檢查時將處理圖標放在檢查標記旁邊,並在檢查完成后將其刪除。 在我的.NET應用程序中,它工作正常,但是我不知道如何在ASP.NET中做到這一點。
我嘗試使用Ajax控件執行此操作,因此我將狀態框包含在更新面板中,並放置了一個計時器,用於每秒更新一次面板。
在后面的代碼中,現在我有一個函數,可以將一些測試文本放到結果文本面板中,同時還有3秒鍾的停頓以模擬背景中的代碼。 但是,直到功能完成而不是每次更新文本時,它才更新面板。
在經典的ASP中,我會將狀態寫到文本文件或DB中,然后將頁面設置為定期重新加載並檢索信息,直到打完完成標志,然后停止重新加載。 如果可以的話,我試圖避免進行所有這些回撥。 我希望有一種更好的方法,但是如果沒有,我只能打電話給更新面板,但是我仍然不確定如何打開和關閉處理圖標。
頁碼
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="Default4" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div>
<table class="Standard">
<tr>
<td colspan="2">
<div class="Title">
Title
</div>
</td>
</tr>
<tr>
<td class="Column1">
<div style="text-align: center;">
Input Devices to Check<br />
<br />
<asp:TextBox ID="txtMachineList" runat="server" TextMode="MultiLine" Rows="12"
Width="200px"></asp:TextBox>
<asp:Button ID="btnStart" CssClass="button_blue_small" runat="server" Text="Start" OnClick="StartCheck" /><br />
<br />
</div>
<table>
<tr>
<td>
<asp:CheckBox runat="server" ID="chkOne" Text="Check 1" />
</td>
<td>
<asp:Image ID="Load1" runat="server" ImageUrl="Images/flower-loader.gif" Visible="false" />
</td>
</tr>
<tr>
<td>
<asp:CheckBox runat="server" ID="chkTwo" Text="Check 2" />
</td>
<td>
<asp:Image ID="Load2" runat="server" ImageUrl="Images/flower-loader.gif" Visible="false" />
</td>
</tr>
</table>
</td>
<td class="Column2">Status:<br />
<asp:UpdatePanel ID="StatusPanel" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="StatusPanelTimer" EventName="Tick" />
</Triggers>
<ContentTemplate>
<asp:TextBox ID="txtStatus" runat="server" Columns="300" Enabled="True" ReadOnly="True"
Width="800px" TextMode="MultiLine" Rows="35"></asp:TextBox>
<asp:Timer ID="StatusPanelTimer" runat="server" Interval="1000" OnTick="StatusTimer_Tick"></asp:Timer>
</ContentTemplate>
</asp:UpdatePanel>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
背后的代碼
protected void Page_Load(object sender, EventArgs e)
{
}
protected void StartCheck(object sender,EventArgs e)
{
Load1.Visible = true;
Load2.Visible = true;
txtStatus.Text = "Test 1";
System.Threading.Thread.Sleep(3000);
txtStatus.Text += "Test 2";
System.Threading.Thread.Sleep(3000);
txtStatus.Text += "Test 3";
System.Threading.Thread.Sleep(3000);
Load1.Visible = false;
Load2.Visible = false;
}
protected void StatusTimer_Tick(object sender, EventArgs e)
{
StatusPanel.Update();
}
因此看來問題出在“開始”按鈕的功能上。
如果您僅添加:
txtStatus.Text += "Tick\n";
到滴答聲事件,您可以看到頁面正在更新。
問題是單擊按鈕后,直到StartCheck
功能完成(即使停止StartCheck
,頁面也不會收到響應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.