1

ASP DataList を含む単純な更新パネルがあります。ドキュメントとその承認ステータスのリストが表示されます。ここにいくつかのサンプルマークアップがあります

<asp:UpdatePanel ID="upDocuments" runat="server" UpdateMode="Always">
    <ContentTemplate>
        <asp:DataList ID="dlDocuments" runat="server" RepeatLayout="Table">
            <HeaderTemplate>
                <table cellpadding="0" cellspacing="0" style="width:100%;">
                    <thead>
                        <th><span style="font-size:110%;">User Documents</span></th>
                        <th></th>
                        <th></th>
                        <th></th>
                    </thead>
            </HeaderTemplate>
            <ItemTemplate>
                    <tr>
                        <td>
                            <asp:HyperLink ID="lnkDocName" runat="server" /></td>
                        <td>
                            <asp:Label ID="lblDocType" runat="server" /></td>
                        <td>
                            <asp:Label ID="lblApproved" runat="server" /></td>
                        <td>
                            <asp:LinkButton ID="btnApprove" runat="server" Visible="false" Text="Approve" />&nbsp;&nbsp;
                            <asp:Label ID="lblApprovedBy" runat="server" /></td>
                    </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:DataList>
    </ContentTemplate>
</asp:UpdatePanel>

コード ビハインドでは、データを取得して DataList にバインドするために Page_Load から呼び出されるルーチンがあります。関連する行は次のとおりです。

// Load the documents - loaded to docList (List<Document>)
dlDocuments.DataSource = docList;
dlDocuments.DataBind();

これまでのところ、すべてが素晴らしいです。次に、DataList のアイテム バインド ハンドラー中に、btnApprove コントロールをハンドラーにバインドして、ドキュメントを読み込み、承認します。

if (!doc.Approved)
{
    LinkButton btnApprove = (LinkButton)e.Item.FindControl("btnApprove");
    btnApprove.Click += new EventHandler(btnApprove_Click);
    btnApprove.Attributes.Add("docKey", doc.docKey);
    btnApprove.Visible = true;
}

それで、

protected void btnApprove_Click(object sender, EventArgs e)
{
    LinkButton btnApprove = (LinkButton)sender;
    int docKey = Int32.Parse(btnApprove.Attributes["docKey"]);
    Document doc = // Load document
    doc.Approved = true;
    doc.ApprovedBy = Page.User.Identity.Name;
    doc.ApprovedDate = DateTime.Now;

    // Save doc back to DB

    LoadUserDocuments();
}

繰り返しますが、すべてが素晴らしいです。ページを読み込み、ドキュメントとそのステータス、およびリンクを確認します。私のテストケースは次のようになります:

  1. ページを読み込む
  2. 最初の文書の「承認」をクリックします。
  3. 承認されていることを確認します。
  4. 2 番目のドキュメントの [承認] をクリックします。
  5. 承認されていることを確認します。

私のテストはステップ 5 で失敗します。デバッグが完了し、クリック ハンドラーが呼び出され、DataList が結果に再バインドされ、ドキュメントが承認済みとしてデータベースに保存されます。ただし、2 番目のドキュメントの更新されたステータスを表示するためにページが更新されることはありません。その後のポストバックが失敗する原因となる、ポストバックで欠落しているステップを誰かが知っていますか?

4

1 に答える 1

0

Page_Load でデータをバインドするときに PostBack をチェックしていますか?

if(!IsPostBack)
      BindDataList();
于 2010-05-07T15:57:06.757 に答える