我有一个包含 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" />
<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();
}
再次,一切都很好。我加载页面,查看文档及其状态和链接。我的测试用例是这样的:
- 加载页面
- 单击第一个文档的“批准”。
- 验证它是否被批准。
- 单击第二个文档的“批准”。
- 验证它是否被批准。
我的测试在第 5 步失败。我已经调试并调用了单击处理程序,DataList 重新绑定到结果,并且文档在批准后保存回数据库。但是,页面永远不会刷新以显示第二个文档的更新状态。有谁知道我在回帖中缺少哪个步骤导致后续回帖失败?