私はここで私の知恵の終わりです。私は、オンラインストアのバックエンド用の注文追跡マネージャを作成しています。私はStringBuilder
HTMLタグを使ってSQLデータベースからの値を1つの長いStringにまとめてHTMLテーブルを作成し、それをASP Literal
のテキストとして設定しました。PostBackのプログラムで定義されたASPリテラルを更新します
この表には、ユーザーが注文データを変更できるようにするフィールドが含まれています(<input>
)。私はボタンを操作して、それらの入力フィールドからのデータをデータベースに送信することもできました。しかし、ここで私の問題が発生します。
私が試しても、ユーザーがボタンを押すと、ページはリロードされますが、テーブルデータは更新されません。つまり、Literal
のテキストは、ページが最初に読み込まれたときとまったく同じです。エラーメッセージがあれば表示されます。ページを更新すると、新しいデータが表示されますが、エラーメッセージが表示されなくなります。
新しいデータを表示するにはどうすればよいですか?私はViewState
またはPage_Load
についての基本的な何かを誤解していると感じています。
ここに私のコードは次のとおりです。
ASP:
<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>
分離コードC#:あなたが与えることができる任意の助け
using // (Various)
namespace AspDotNetStorefront
{
public partial class OrderManagerPage : SkinBase
{
protected void Page_Load(object sender, EventArgs e)
{
// Here I get data from the SQL database.
// Then,
StringBuilder phoneOrdersHtml = new StringBuilder();
// Build a series of HTML table rows with the data retrieved.
// Finally,
ltTableData.Text = phoneOrdersHtml.ToString();
}
void btnSaveAndEmail_Click(object sender, EventArgs e)
{
// Takes values from PhoneUpdates TextBox and creates SQL update query, then executes it.
// If errors are returned, places them into ltErrors.Text.
}
}
}
感謝。
ありがとうございました!私はページのライフサイクルに関する長い、複雑な記事の終わりを読んでいませんでしたが、クリックイベントハンドラがPage_Loadの後に処理される部分は見逃していました。今美しく働いています。 – Nathanael