【问题标题】:Implementing a functional link in a Repeater control在中继器控件中实现功能链接
【发布时间】:2009-04-20 15:35:34
【问题描述】:

我正在我的 Web 应用程序中实现一个中继器来显示数据。我想在类似于 GridView 中的内置功能的列中添加功能操作链接。任何人都可以给我所需的步骤吗?我假设我将为每一行添加一个 LinkBut​​ton 控件,以某种方式将 OnClick 事件处理程序设置为指向相同的方法,并以某种方式将行上的唯一标识符作为参数传递。

谢谢!

【问题讨论】:

    标签: asp.net repeater


    【解决方案1】:

    我猜这就是你想要的。

        <asp:Repeater ID="rpt" runat="server">
            <ItemTemplate>
                <asp:LinkButton ID="lbtn" runat="server" OnCommand="lbtn_Command" 
                CommandArgument='<%# DataBinder.Eval(Container.DataItem, "KeyIDColumn") %>' ></asp:LinkButton>
            </ItemTemplate>
        </asp:Repeater>
    

    然后在你的代码后面

    protected void lbtn_Command(object sender, CommandEventArgs e)
    {
        int id = Convert.ToInt32(e.CommandArgument);
    }
    

    【讨论】:

    • 很棒 答案。正是我想要的。谢谢!我从来没有注意到 LinkBut​​ton 控件上的 OnCommand 和 CommandArgument 属性。
    • 是的,它非常方便,尤其是使用 DataBound Content... 同样,如果您需要多个链接按钮来执行不同的命令(例如 VoteUp / VoteDown / MarkAsSpam),那么您可以为每个控件指定不同的 CommandNames 并打开开关/大小写代码中的 CommandName
    • 太棒了。除了使用分隔字符串之外,还有其他方法可以处理 CommandArgument 属性中的多个值吗?
    • 啊,比使用我发布的数据绑定方法要干净得多。我完全忘记了命令参数。 +1
    • @Mike C. 你可以存储注入两个单独的值。一个在 CommandArgument 中,一个在 CommandName 中,因此如果每次都将是完全相同的命令,您可以使用 CommandName 作为第二个参数,但除此之外,您需要使用分隔字符串来存储值跨度>
    【解决方案2】:

    使用链接按钮。这样就可以在后面的代码中处理 OnClick 事件了。

    【讨论】:

    • 是的,我就是这个意思。感谢您指出了这一点。我将如何从转发器设置事件处理程序并传入唯一 ID 有一个参数?
    【解决方案3】:

    首先,您将在标记中设置链接按钮的 onclick。然后,您需要为转发器实现 ItemDataBound 事件。

      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
             SomeObject obj = e.Item.DataItem as SomeObject; // w/e type of item you are bound to
             var linkButton = e.Item.FindControl("linkButtonId") as LinkButton;
             if(linkButton != null)
             {
                  //either set a custom attribute or maybe append it on to the linkButton's ID
                  linkButton.Attributes["someUniqueId"] = obj.SomeID;
             }
        }
    

    然后在点击事件中

    void lb_Click(object sender, EventArgs e)
    {
        LinkButton lb = sender as LinkButton;
        if (lb != null)
        {
            // obviously do some checking to ensure the attribute isn't null
            // and make it the correct datatype.
            DoSomething(lb.Attributes["someUniqueId"]);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 2012-08-15
      相关资源
      最近更新 更多