ASP.net - UpdatePanel中的Repeater中的LinkBut​​tons不会触发任何类型的回发

时间:2010-09-13 14:16:52

标签: c# asp.net ajax

我的页面包含一个Repeater,它在数据可用时异步加载数据,使用UpdatePanel来管理异步请求。

该页面包含的内容有点像这样:

 <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似乎没有触发任何类型的回发 - 没有可见的响应来点击它并在代码隐藏中对事件监听器设置断点,它永远不会被触发。

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

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

但遗憾的是,因为控件在ContentTemplate中,所以如果我尝试这样做,它就会崩溃。

我探索过的另一个途径是在代码隐藏中明确添加它们:

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

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

FindControlRecursive方法的行为与FindControl类似,只是它实际上找到了控件。

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

任何人都可以建议我需要做些什么才能让他们像我期望的那样回复?

编辑:最初我让这个页面在没有UpdatePanel的情况下工作,并且它工作正常,更多的数据开始计时,所以我需要异步获取数据。当我做出这个改变时,链接按钮停止工作。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您需要<asp:Repeater ID="RepeaterBlock" runat="server" OnItemCommand="RepeaterData_ItemCommand">

RepeatData.ItemCommand += new RepeaterCommandEventHandler(RepeatData_ItemCommand);

之前的每个回发中

RepeatData.DataBind();