在PostBack上更新以编程方式定义的ASP Literal

时间:2016-05-11 17:18:28

标签: c# asp.net

我在我的智慧'到此为止。我正在为我们的在线商店后端创建一个订单跟踪管理器。我已经设法通过{{1}将我们的SQL数据库中带有HTML标记的值合并到一个长字符串中来创建HTML表格,然后将其设置为ASP StringBuilder的文本。

该表包含Literal个字段,以允许用户更改订单数据。我还设法让按钮工作,将来自这些输入字段的数据发送到我们的数据库中。但是我的问题就出现了:

无论我尝试什么,当用户按下按钮时,页面重新加载但不更新表格数据。也就是说,<input>的文本与首次加载页面时的文本完全相同。如果有错误消息确实显示。如果我刷新页面,则会显示新数据 - 但这会导致错误消息消失。

如何显示新数据?我有一种感觉,我误解了关于LiteralViewState或其中一件事情的基本信息。

这是我的代码:

ASP:

Page_Load

Codebehind C#:

<asp:Content ID="PageContent" runat="server" ContentPlaceHolderID="PageContent">
    <asp:Panel ID="pnlContent" runat="server">
    <asp:Panel runat="server" ID="managerUpdate">
        <h1><asp:Literal ID="ltResultsHeading" runat="server"></asp:Literal></h1>
        <%-- Header and other miscellaneous --%>
        <table id="order-table" style="table-layout:fixed;" class="table table-condensed table-bordered small text-center">
            <colgroup>
                <col style="width:7.5%"><col style="width:10%"><col style="width:20%"><col style="width:20%"><col style="width:20%"><col style="width:7.5%"><col style="width:7.5%">
            </colgroup>
            <thead>
                <tr>
                    <th>Order &#8470;</th>
                    <th>Conf. &#8470;</th>
                    <th>Stage</th>
                    <th>Est'd ship date</th>
                    <th>Shippped via</th>
                    <th>Send update email?</th>
                    <th>Save chngs?</th>
                </tr>
            </thead>
            <tbody> 
                <asp:Literal ID="ltTableData" runat="server"></asp:Literal>
            </tbody>
        </table>

        <asp:Button ID="btnSaveAndEmail" Text="Save and Send Emails" runat="server" OnClientClick="return createArrays();" CssClass="btn btn-primary btnSaveAndEmail"></asp:Button>

        <asp:Literal ID="ltErrors" runat="server"></asp:Literal>
        <br>
        <asp:TextBox 
            TextMode="multiline" ID="PhoneUpdates" 
            CssClass="PhoneUpdates" runat="server">
        </asp:TextBox>
        <br>

        <script>
        // jQuery to validate data changed in the inputs in the table, create delimited strings with data values, and put them in the TextBox above.
        </script>
    </asp:Panel>
</asp:Content>

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

您可能想了解一下WebForms如何处理页面生命周期:https://msdn.microsoft.com/en-us/library/ms178472.aspx#general_page_lifecycle_stages

您的Page_Load事件首先触发,然后触发您的按钮点击事件。在您的情况下,您首先设置文本,然后运行SQL更新查询,因此似乎没有任何更改。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            WriteTable();
        }
    }

    protected void Unnamed_Click(object sender, EventArgs e)
    {
        // Run SQL stuff
        WriteTable();
    }

    private void WriteTable()
    {
        StringBuilder phoneOrdersHtml = new StringBuilder();
        ltTableData.Text = phoneOrdersHtml.ToString();
    }