【问题标题】:Setting LinkButton's OnClick event to method in codebehind在后面的代码中将 LinkBut​​ton OnClick 事件设置为方法
【发布时间】:2013-08-04 20:46:07
【问题描述】:

我正在从我的代码隐藏构造一个 LinkBut​​ton,我需要将 onclick 分配给一个方法,并传递一个参数。到目前为止我有这个:

LinkButton lnkdel = new LinkButton();
lnkdel.Text = "Delete";

我要传递给它的方法如下所示:

 protected void delline(string id)
        {

        }

【问题讨论】:

    标签: c# asp.net events linkbutton


    【解决方案1】:

    您不能将它传递给该方法,您需要将点击事件委托分配给能够处理它的方法。

    像这样:

    public void DynamicClick(object sender, EventArgs e) {
        // do something
    }
    

    像分配任何事件一样分配点击事件:

    lnkdel.Click += new EventHandler(DynamicClick);
    

    如果你想传递一个参数,使用 CommandArgument,你需要一个不同的委托:

    void DynamicCommand(Object sender, CommandEventArgs e) 
          {
             Label1.Text = "You chose: " + e.CommandName + " Item " + e.CommandArgument;
          }
    

    然后:

    lnkDel.Command += new CommandEventHandler(DynamicCommand)
    lnkDel.CommandArgument = 1234;
    

    顺便说一句,如果您使用 >= C#3,您还可以使用 匿名方法的酷炫功能:

    lnkDel.Command += (s, e) => { 
       Label1.Text = "You chose: " + e.CommandName + " Item " + e.CommandArgument;
    };
    

    【讨论】:

    • 谢谢哥们,我正在尝试使用您发布的第二种方法,因为该帖子的目的是传递一个 ID 以进行删除。 .OnCommand 没有出现在智能感知列表中,当我尝试键入它时,它告诉我 LinkBut​​ton 由于其保护级别而无法访问?
    • @Chris - 是的,忘记了带有链接按钮的“错误/功能”。试试这个:lnkDel.Command += new CommandEventHandler(DynamicCommand) 或只是lnkDel.Command += DynamicCommand
    • 谢谢哥们,它可以编译,但它似乎永远不会进入命令——我错过了什么吗?我也尝试过 C#3 方法,它可以编译,但再也没有进入该方法
    • 动态创建的控件存在很多问题。这是我的建议,首先向页面添加一个常规链接按钮(非动态,将其添加到 ASPX/ASCX),然后像上面一样从代码隐藏设置命令(不要新建按钮,只需设置命令/命令)。看看它是否有效。应该,如果确实如此,则意味着您可能缺少动态控件的某些内容-例如未在回发时重新创建控件等。
    • 请记住 - 动态创建的控件需要在回发时重新创建(在 Page_Load 事件中)。你这样做吗?如果出于某种原因无法在 Page_Load 中设置命令参数,则需要将命令参数存储在视图状态中。这种事情会变得很混乱。
    【解决方案2】:

    这个事件的函数原型是:

    protected void lnkdel_OnClick(object _sender, EventArgs _args)
    {
        LinkButton src = (LinkButton)_sender;
        // do something here...
    }
    

    分配给它:

    LinkButton lnkdel = new LinkButton();
    lnkdel.Text = "Delete";
    lnkdel.OnClick += new EventHandler(lnkdel_OnClick);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      相关资源
      最近更新 更多