繁体   English   中英

事件绑定到Repeater的每个LinkBut​​ton不起作用

[英]Event binding to each LinkButton of Repeater not working

我需要为C#(asp.net)中的每个转发器设置一个按钮。

<com:Repeater runat="server" ID="list_repeater">
  <ItemTemplate>
    <tr>
      <td>
        <asp:LinkButton runat="server" ID="btnCancel" CommandArgument='<%# Eval("id") %>'>Cancel</asp:LinkButton>
      </td>
      ...
    </tr>
  </ItemTemplate>
</com:Repeater>

我在PageLoad中绑定数据。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        list_repeater.DataSource = ... getData ..;
        list_repeater.DataBind();
        ...
    }
}

当然,我在列表上绑定RepeaterItemEventHandler。

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    base.LoadingControlAdd();
    ...
    list_repeater.ItemDataBound += new RepeaterItemEventHandler(list_repeater_ItemDataBound);
    ...
}

然后我将EventHandler绑定到每个btnCancel。

protected void list_repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        LinkButton btnCancel = e.Item.FindControl("btnCancel") as LinkButton;
        btnCancel.Click += new EventHandler(btnCancel_Click);
    }
}

但是,它不起作用。 当我单击每个项目的btnCancel时 ,不会触发btnCancel_Click 我认为我做得很好,并且找不到任何缺陷。 上面的代码是否有任何错误,请告诉我有什么问题。 谢谢。 (CommnadArgument上的ID设置正确,请不要介意)

我解决了。

参考: https : //forums.asp.net/t/1680429.aspx?bind+event+handler+for+dynamic+controls+in+repeater

据我所知,当您调用DataBind()时会使用“ itemDataBound”事件。 但是,数据绑定过程通常可以在if(!IsPostBack){……}的主体中完成,因此您再也不能调用DataBind()了,我想原因是这样的。

要解决该问题,您可以尝试将如下代码放入:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        list_repeater.DataSource = ... getData ..;
        list_repeater.DataBind();
        ...
    }
    ...
    foreach(RepeaterItem item in list_repeater.Items) {
        if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
        {
            LinkButton btnCancel = item.FindControl("btnCancel") as LinkButton;
            btnCancel.Click += new EventHandler(btnCancel_Click);
        }
    }

这是由于我对asp.net的了解不足所致。 抱歉,问题发表后几分钟之内即可自动答复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM