2016-05-11 1 views
1

私はここで私の知恵の終わりです。私は、オンラインストアのバックエンド用の注文追跡マネージャを作成しています。私は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 &#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> 

分離コード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. 
     } 
    } 
} 

感謝。

答えて

1

あなたはWebフォームは、ページのライフサイクルをどのように処理するかを見てみたいことがあります: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(); 
    } 
+0

ありがとうございました!私はページのライフサイクルに関する長い、複雑な記事の終わりを読んでいませんでしたが、クリックイベントハンドラがPage_Loadの後に処理される部分は見逃していました。今美しく働いています。 – Nathanael

関連する問題