【问题标题】:How to get bound object in a repeater's button click event handler?如何在中继器的按钮单击事件处理程序中获取绑定对象?
【发布时间】:2011-12-20 15:47:00
【问题描述】:

我有一个中继器并将一个对象列表绑定到它,如下所示:

List<MyClass> myList = //....
MyRepeater.DataSource = myList;
MyRepeater.DataBind();

在中继器内部,我有一个由该处理程序处理的链接按钮:

protected void Button_ItemCommand(object source, RepeaterCommandEventArgs e) {
    if (e.CommandName == "Edit") {
        // I need to get my listItem.Id here
    }
}

应该很容易,但我不知道怎么做。

谢谢。

【问题讨论】:

    标签: c# asp.net data-binding repeater


    【解决方案1】:

    如果您想要实际点击的链接按钮,它已经在 object source 参数中传递给此方法 - 只需适当地转换它即可。

    LinkButton lb = source as LinkButton;
    

    如果您想要中继器中的其他控件,您可以使用

    Button randomButton = e.Item.FindControl("buttonId") as Button;
    

    编辑

    如果你想从该行绑定到的对象中获得一个属性,这样做会很痛苦,而且会很丑陋。您需要在 Session 或 ViewState 中保持转发器绑定到的 DataSource 跨回发。完成此操作后,您可以通过将其索引与被点击的 reeater 行的索引匹配来访问源中的适当对象,您可以通过以下方式获得:

    e.Item.ItemIndex
    

    请注意,最简单的方法是将此值存储在中继器中的某个位置。

    【讨论】:

    • 抱歉,可能我没说清楚,我需要获取绑定到此中继器项的对象的属性。
    • @Burjua,如我的回答中所述,这是无法做到的。您必须将数据保存在控件中并使用 FindControl 方法。
    【解决方案2】:

    大多数情况下,从存储/缓存/等中获取绑定对象很容易。如果你有身份证。既然您在问题“I need to get my listItem.Id here”中说,我认为您不介意重新获取对象本身,只是在寻找一种仅从中继器获取标识符的方法。

    只需给按钮一个命令参数,如图所示:

    <asp:LinkButton runat="server" ID="lnkEdit" CommandName="Edit"
      CommandArgument='<%# Eval("ID") %>'>Edit</asp:LinkButton>
    

    那么就像你在问题中正确所说的那样,

    protected void Button_ItemCommand(object source, RepeaterCommandEventArgs e) {
      if (e.CommandName == "Edit") {
        // I need to get my listItem.Id here
        RenderEditDialog(FetchFromStorage(e.CommandArgument.ToString());
      }
    }
    

    【讨论】:

      【解决方案3】:

      你不能这样做。 ASP.Net 不会跨回发保留原始数据绑定对象。您必须将要保留的数据存储在转发器内的控件中。然后您可以通过 EventArgs 访问控件,例如

      e.Item.FindControl("myControl");
      

      【讨论】:

        猜你喜欢
        • 2015-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多