从后面的代码更新文本框

时间:2014-03-14 18:07:40

标签: c# asp.net ajax textbox

我正在将应用程序转换为ASP.NET网站。页面的工作方式是用户放入框中的机器列表然后单击开始,它通过列表运行检查并将状态和结果输出到左侧的文本框。此外,它在检查标记旁边放置一个处理图标,因为它运行检查并在检查完成后将其删除。在我的.NET应用程序中它工作正常,但我无法弄清楚如何在ASP.NET中执行它

我已尝试使用Ajax控件执行此操作,因此我将状态框包含在更新面板中,并放置一个计时器,每秒更新一次面板。

在后面的代码中,现在我有一个函数,只是将一些测试文本注释到结果文本面板,同时暂停3秒以模拟背景中的代码。但是,在功能完成之前,它不会更新面板,而不是每次更新文本。

在经典ASP中,我会将状态写入文本文件或数据库,只需将页面设置为定期重新加载并检索信息,直到完成标记被触发,然后停止重新加载。如果我能帮助的话,我试图避免让所有这些回电。我希望有一个更好的方法来做到这一点,但如果没有我只能让更新面板回拨,但我仍然不完全确定如何打开和关闭处理图标。 / p>

网页代码

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

1 个答案:

答案 0 :(得分:0)

所以看起来问题出现在你的“开始”按钮的功能中。

如果您只是添加:

txtStatus.Text += "Tick\n";

到您的tick事件,您可以看到您的页面正在更新。

问题是,单击该按钮后,在StartCheck功能完成之前页面才会收到响应(即使停止滴答)。