【问题标题】:ASP.net UpdatePanel - Works first time then failsASP.net UpdatePanel - 第一次工作然后失败
【发布时间】:2010-05-07 15:40:00
【问题描述】:

我有一个包含 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>

在我的代码隐藏中,我有一个从 Page_Load 调用的例程来获取数据并将其绑定到 DataList。以下是相关行。

// 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. 为第二个文档点击“批准”。
  5. 验证它是否被批准。

我的测试在第 5 步失败。我已经调试并调用了单击处理程序,DataList 重新绑定到结果,并且文档在批准后保存回数据库。但是,页面永远不会刷新以显示第二个文档的更新状态。有谁知道我在回发中缺少哪个步骤导致后续回发失败?

【问题讨论】:

    标签: asp.net updatepanel postback datalist partial-postback


    【解决方案1】:

    在 Page_Load 上绑定数据时是否检查 PostBack?

    if(!IsPostBack)
          BindDataList();
    

    【讨论】:

    • 谢谢,但是是的。就在那里。
    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2010-12-14
    • 2015-04-16
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多