将LinkBut​​ton的OnClick事件设置为代码隐藏中的方法

Chr*_*ris 14 c# asp.net events linkbutton

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

LinkButton lnkdel = new LinkButton();
lnkdel.Text = "Delete";
Run Code Online (Sandbox Code Playgroud)

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

 protected void delline(string id)
        {

        }
Run Code Online (Sandbox Code Playgroud)

RPM*_*984 31

那么你不能将它传递给那个方法,你需要将click事件委托分配给一个能够处理它的方法.

像这样:

public void DynamicClick(object sender, EventArgs e) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

像任何事件一样分配click事件:

lnkdel.Click += new EventHandler(DynamicClick);
Run Code Online (Sandbox Code Playgroud)

如果要传递参数,请使用CommandArgument,并且您需要一个不同的委托:

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

然后:

lnkDel.Command += new CommandEventHandler(DynamicCommand)
lnkDel.CommandArgument = 1234;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果你在> = C#3,你也可以使用匿名方法的酷感:

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

  • 动态创建的控件存在很多问题。这是我的建议,首先向页面添加一个常规链接按钮(非动态,将其添加到 ASPX/ASCX),然后像上面一样从代码隐藏中设置命令(不要新建按钮,只需设置命令/命令参数)。看看是否有效。它应该,如果确实如此,则意味着您可能缺少动态控件的某些内容 - 例如不在回发时重新创建控件等。 (2认同)
  • 请记住 - 动态创建的控件需要在回发时重新创建(在 Page_Load 事件中)。你在这样做吗?如果出于某种原因无法在 Page_Load 中设置命令参数,则需要将命令参数存储在视图状态中。这种事情可能会变得非常混乱。 (2认同)