我的页面包含一个Repeater,它在数据变得可用时异步加载数据,使用UpdatePanel管理异步请求。ASP.net - 在UpdatePanel中的Repeater中的LinkButtons不会触发任何种类的回发
页包含有点像这样的东西:
<asp:UpdatePanel ID="DataUpdatePanel" runat="server">
<ContentTemplate>
<table>
<asp:Repeater ID="RepeaterBlock" runat="server">
<HeaderTemplate><thead><tr><th>Name</th><th>Status</th><th class="empty"></th></tr></thead></HeaderTemplate>
<ItemTemplate><tr>
<td><a class="link" href="Detail.aspx?item=<%# DataBinder.Eval(Container.DataItem, "Name") %>"><%# DataBinder.Eval(Container.DataItem, "Name") %></a>
</td>
<td><%# DataBinder.Eval(Container.DataItem, "Status") %></td>
<td class="no-border">
[<asp:LinkButton CommandName='Schedule' CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Name") %>' ID="ScheduleButton" runat="server" CausesValidation="false" >Schedule</asp:LinkButton>]
</td>
</tr></ItemTemplate>
</asp:Repeater>
</table>
</ContentTemplate>
</asp:UpdatePanel>
的问题在于LinkButton的似乎并没有引发任何kind-回传出现于点击它,并把一个破发没有明显的反应指向代码隐藏中的事件监听器,它永远不会被触发。
我曾尝试手动添加触发器是这样的:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ScheduleButton" />
</Triggers>
但不幸的是becausee的控制是的ContentTemplate内崩溃了,如果我尝试这样做。
我已经探索了另一种途径是直接添加这些服务的代码隐藏:
RepeatData.DataBind();
RepeatData.ItemCommand += new RepeaterCommandEventHandler(RepeatData_ItemCommand);
UpdateScripts.RegisterAsyncPostBackControl(FindControlRecursive(RepeatData, "SchedulButton"));
的FindControlRecursive方法只是表现得像只FindControl已实际找到控制。
这不会崩溃,但它也不会导致LinkButtons生效。
任何人都可以建议我需要做什么,使他们回发,因为我期望他们?
编辑:最初我有这个页面没有UpdatePanel工作,它工作正常,更多的数据开始超时,所以我需要异步获取数据。当我做出这个改变时,linkbutton停止工作。
什么事件的处理程序注册
在每次回发<asp:Repeater ID="RepeaterBlock" runat="server" OnItemCommand="RepeaterData_ItemCommand">
或
RepeatData.ItemCommand += new RepeaterCommandEventHandler(RepeatData_ItemCommand);
之前要么?我没有看到你的标记中指定的任何内容。 – lincolnk 2010-09-13 14:23:59它不在标记中,这就是为什么我将它添加到CodeBehind中代码片段的第二行中的Repeater。 – glenatron 2010-09-13 14:36:53