处理来自Repeater页脚的控制事件

时间:2011-08-01 10:30:01

标签: c# asp.net vb.net events event-handling

假设我有以下转发器。

<asp:Repeater ID="MyRepeater" runat="server" onitemdatabound="MyRepeater_ItemDataBound">
    <FooterTemplate>
        </table>
        <asp:Button ID="btnPrevious" runat="server" Text="<" />
        <asp:Label ID="lblCurrentPage" runat="server" Text="<%# PagingStatus() %>" />
        <asp:Button ID="btnNext" runat="server" Text=">" />
    </FooterTemplate>
</asp:Repeater>

如何处理来自btnPreviousbtnNext的点击事件?

我尝试了以下内容:

protected void MyRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    Button btnPrevious = (Button)e.Item.FindControl("btnPrevious");
    Button btnNext = (Button)e.Item.FindControl("btnNext");

    if (btnPrevious != null)
        btnPrevious.Click += btnPrevious_Click;
    if (btnNext != null)
        btnNext.Click += btnNext_Click;
}

但这已经失败了(事件永远不会被提出)..

2 个答案:

答案 0 :(得分:3)

您可以像使用普通按钮事件处理程序一样使用它们,例如:

HTML:

<asp:Button ID="btnNext" runat="server" CommandArgument="<%=Id%>" onclick="Button_OnClick" Text=">" />

代码:

protected void Button_OnClick(object sender, EventArgs e)
{
    Button button = sender as Button;
    if(button != null)
    {
       string commandArg = button.CommandArgument;
       //Do Work
    }
}

您可以使用命令参数找出单击了哪个按钮 希望这会有所帮助。

答案 1 :(得分:2)

我建议使用转发器的ItemCommand事件。您仍然需要将命令添加到按钮。像这样:

<asp:Button ID="btnPrevious" runat="server" Text="<" CommandName="Previous"/>

protected void MyRepeater_ItemCommand(object source, RepeaterCommandEventArgs e) 
{
    if(e.CommandName.ToLower().Equals("previous")) {
        //go back
    }
    else
    {
        //go forward
    }
}
相关问题