我的UpdatePanel
中有一个Repeater
包含三个ascx
,如下所示:
<asp:UpdatePanel ID="myUpdatePanel" runat="server">
<ContentTemplate>
<%-- Info (Repeater 1)--%>
<div id="info" class="tab-pane">
<asp:Repeater ID="rptInfo" runat="server">
<ItemTemplate>
<asp:LinkButton runat="server"
ID="lnkSaveInfo"
CommandName="saveInfo"
ClientIDMode="AutoID" />
</ItemTemplate>
</asp:Repeater>
</div>
<%-- Documents (Repeater 2)--%>
<div id="documents" class="tab-pane">
<asp:Repeater ID="rptDocumentDefs" runat="server">
<ItemTemplate>
<table class="table table-striped table-bordered table-hover">
<%-- subDocuments (Repeater 3)--%>
<asp:Repeater ID="rptSubDocumnets" runat="server" OnItemCommand="rptSubDocumnets_ItemCommand" OnItemDataBound="rptSubDocumnets_ItemDataBound">
<ItemTemplate>
<tr class="rgRow">
<td>
<asp:LinkButton runat="server"
ID="LnkDownLoadDocument"
CommandName="downLoadDocument"
ClientIDMode="AutoID">
</asp:LinkButton>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</ItemTemplate>
</asp:Repeater>
</div>
</ContentTemplate>
</asp:UpdatePanel>
代码
public void rptSubDocumnets_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
ScriptManager scriptMan = ScriptManager.GetCurrent(this.Page);
scriptMan.RegisterPostBackControl(e.Item.FindControl("LnkDownLoadDocument") as LinkButton);
}
如果我点击LnkDownLoadDocument
,那么下载文件就可以正常运行,但如果我点击lnkSaveInfo
,之后点击LnkDownLoadDocument
,我会收到如下错误:
未捕获错误:Sys.WebForms.PageRequestManagerParserErrorException: 无法解析从服务器收到的消息。共同 导致此错误的原因是通过调用修改响应 Response.Write(),响应过滤器,HttpModules或服务器跟踪是 启用。详细信息:解析&#39;�PNG
附近时出错
我在很多项目中都使用了下载方法,它运行正常,在我调试代码时,服务器端没有任何错误。
我的问题中没有一个解决方案正常运作
我尝试了许多解决方案,它们与我的问题类似,如下所示,但它们都没有正常工作,我决定提出新问题。
How to do AsyncPostBackTrigger for the LinkButton in the Repeater
如果有人可以解释此问题的解决方案,那将非常有帮助。提前谢谢。
答案 0 :(得分:0)
创建一个单独的方法来循环Repeater中的所有项目并在那里附加PostBack触发器。
private void bindPosdtBackToRepeaterButtons()
{
foreach (RepeaterItem item in rptDocumentDefs.Items)
{
ScriptManager scriptMan = ScriptManager.GetCurrent(this.Page);
scriptMan.RegisterPostBackControl(item.FindControl("LnkDownLoadDocument") as LinkButton);
}
}
在lnkSaveInfo
处理程序中调用此方法。您也可以使用它而不是DataBound事件来保存一些代码行。执行Repeater DataBind()
后调用此方法。