我在我的智慧'到此为止。我正在为我们的在线商店后端创建一个订单跟踪管理器。我已经设法通过{{1}将我们的SQL数据库中带有HTML标记的值合并到一个长字符串中来创建HTML表格,然后将其设置为ASP StringBuilder
的文本。
该表包含Literal
个字段,以允许用户更改订单数据。我还设法让按钮工作,将来自这些输入字段的数据发送到我们的数据库中。但是我的问题就出现了:
无论我尝试什么,当用户按下按钮时,页面重新加载但不更新表格数据。也就是说,<input>
的文本与首次加载页面时的文本完全相同。如果有错误消息确实显示。如果我刷新页面,则会显示新数据 - 但这会导致错误消息消失。
如何显示新数据?我有一种感觉,我误解了关于Literal
或ViewState
或其中一件事情的基本信息。
这是我的代码:
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 №</th>
<th>Conf. №</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>
感谢您提供任何帮助。
答案 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();
}