2010-09-13 36 views
1

我的页面包含一个Repeater,它在数据变得可用时异步加载数据,使用UpdatePanel管理异步请求。ASP.net - 在UpdatePanel中的Repeater中的LinkBut​​tons不会触发任何种类的回发

页包含有点像这样的东西:

<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> 

的问题在于LinkBut​​ton的似乎并没有引发任何kind-回传出现于点击它,并把一个破发没有明显的反应指向代码隐藏中的事件监听器,它永远不会被触发。

我曾尝试手动添加触发器是这样的:

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="ScheduleButton" /> 
</Triggers> 

但不幸的是becausee的控制是的ContentTemplate内崩溃了,如果我尝试这样做。

我已经探索了另一种途径是直接添加这些服务的代码隐藏:

RepeatData.DataBind(); 
    RepeatData.ItemCommand += new RepeaterCommandEventHandler(RepeatData_ItemCommand); 

    UpdateScripts.RegisterAsyncPostBackControl(FindControlRecursive(RepeatData, "SchedulButton")); 

的FindControlRecursive方法只是表现得像只FindControl已实际找到控制。

这不会崩溃,但它也不会导致LinkBut​​tons生效。

任何人都可以建议我需要做什么,使他们回发,因为我期望他们?

编辑:最初我有这个页面没有UpdatePanel工作,它工作正常,更多的数据开始超时,所以我需要异步获取数据。当我做出这个改变时,linkbutton停止工作。

+0

什么事件的处理程序注册<asp:Repeater ID="RepeaterBlock" runat="server" OnItemCommand="RepeaterData_ItemCommand">

在每次回发

RepeatData.ItemCommand += new RepeaterCommandEventHandler(RepeatData_ItemCommand);之前要么?我没有看到你的标记中指定的任何内容。 – lincolnk 2010-09-13 14:23:59

+0

它不在标记中,这就是为什么我将它添加到CodeBehind中代码片段的第二行中的Repeater。 – glenatron 2010-09-13 14:36:53

回答

1

您需要将所有链接按钮注册到带服务器端事件处理程序的OnCommand才能使用CommandName/CommandArg属性。

[<asp:LinkButton CommandName='Schedule' CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Name") %>' ID="ScheduleButton" runat="server" CausesValidation="false" OnCommand="LinkButtonCommandEventHandler" >Schedule</asp:LinkButton>] 

请参阅MSDN参考:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linkbutton.commandname.aspx

+0

我将Repeater的ItemCommand作为一个整体使用,而不是使用基于按钮的按钮:http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.repeater.itemcommand .aspx – glenatron 2010-09-13 14:41:22

+0

难题,您的Page_Load事件是否被点击链接按钮点击?如果您注册了OnCommand事件,那么数据绑定是否会改变任何内容? – asawyer 2010-09-13 14:45:45

+0

改变绑定顺序没有区别。看起来,linkbuttons只是当我点击它们时什么都不做。我想下一步可​​能会逐步通过JavaScript,但即使我找到问题的原因,但我不确定如何调整它。 – glenatron 2010-09-13 15:04:46

0

你需要RepeatData.DataBind();

+0

我试着改变上面代码的顺序(你会注意到我在上面最后一段代码中有第二行)把事件处理程序放在数据绑定之前,它没有什么区别。 – glenatron 2010-09-13 15:02:56

相关问题