多步骤过程中的ASPX更新文本框控件

时间:2019-02-21 20:36:57

标签: c# asp.net ajax

我有一个Web表单,它将(执行)从Excel工作簿到数据库的导入过程。导入涉及多个步骤,我创建了一个DLL来完成大部分工作。我在类中内置了一个事件,因此可以显示来自独立程序(控制台)还是Web表单处理/错误消息。

namespace VDKItemImportToCM
{
    public class VDKItemImporter
    {
        /// <summary>
        /// Delegate methods for event handling
        /// </summary>  
        public event EventHandler<StdMessageArgs> onSendMessage;
        public class StdMessageArgs : EventArgs
        {
            public StdMessageArgs(string iMsg, char sType)
            { Msg = iMsg; ErrorType = sType; }
            public string Msg { get; set; }
            public char ErrorType { get; set; }
        }
        public string AssemblyVersion = "";
        public string AssemblyName = "";

        ... // lots of code to process import

         private void log(string msg, char errType)
        {
            onSendMessage(this, new StdMessageArgs(msg, errType));
        }
    }
}

在我的Web表单页面中,我有一个文本框,该文本框通过触发对象事件来捕获导入对象的输出。这是aspx代码:

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <table style="width: 800px">
        <tr>
            <td align="center" colspan="2" height="40px">
                                            <asp:Label ID="Label1" runat="server" Text="Van Dyke Item Import to CM" class="heading1" Font-Bold="False" Font-Names="Verdana" ForeColor="Blue" Font-Size="Medium"></asp:Label>
                                        </td>
        </tr>
        <tr>
            <td colspan="2" style="padding-bottom: 30px; margin-bottom: 30px">
                <asp:Label ID="lblImportMessages" runat="server"></asp:Label>
            </td>
        </tr>
        <tr>
            <td style="width: 187px">
                <asp:Label ID="Label2" runat="server" Text="Select Excel Import File:"></asp:Label>
            </td>
            <td>
                <asp:FileUpload ID="fulExcelFile" runat="server" Width="315px" />
            </td>
        </tr>
        <tr>
            <td colspan="2" height="45px">
                <asp:Button ID="btnImportItems" runat="server" OnClick="btnImportItems_Click" Text="Import Items" />
            </td>
        </tr>
        <tr>
            <td colspan="2">Import Progress</td>
        </tr>
        <tr>
            <td colspan="2">
                <asp:TextBox ID="txtDisplayProgress" runat="server" Height="400px" TextMode="MultiLine" Width="100%"></asp:TextBox>
            </td>
        </tr>
    </table>
</asp:Content>

最后,在后端代码中,我从单击按钮开始,调用main函数以通过对象方法处理导入。对象的自定义事件会将进度文本放入显示文本框中

protected void btnImportItems_Click(object sender, EventArgs e)
{
    processClientExcel(fulExcelFile);
}
protected void itemImport_OnMsg(object sender, VDKItemImporter.StdMessageArgs e)
{
    string errorType = "";
    switch (e.ErrorType)
    {
        case 'i':
            errorType = "Info: ";
            break;
        case 'e':
            errorType = "Error: ";
            break;
        case 'f':
            errorType = "Fatal: ";
            break;
    }

    txtDisplayProgress.Text += errorType + e.Msg + "\r\n";
}

这是一段代码,其中调用了一个对象方法(导致事件触发并将信息添加到显示文本:

  private void processClientExcel(FileUpload uploadFile)
    {
        .... \\ some code before this
        \\ the itemImport object fires the event shown above
        if (!itemImport.setupStagingTables(Server.MapPath("~/SupData/") + filename))
        {
            txtDisplayProgress.Text += "The staging tables where not set up correctly.  Stopping import now.";
            return;
        }
    }

我环顾四周,看到了使用针对updatepanels的计时器的示例,并且我不想使用进度条。我还看到,仅更新updatepanel不会立即更改显示。

问题是,有没有一种方法可以在对象事件触发时立即创建显示文本框的更新。

0 个答案:

没有答案