c# - 链接按钮的单击功能未被调用

标签 c# asp.net linkbutton

我正在 c# 中生成动态链接按钮。单击其中任何一个按钮时,将调用另一个函数来显示单击了哪个链接按钮。但单击任何链接按钮时都不会调用它。

这就是我生成它的方式。

 Int32 i; //create a integer variable
 for (i = 1; i <= 10; i++) // will generate 10 LinkButton
 {
LinkButton lb = new LinkButton(); //create instance of LinkButton
lb.Text = Convert.ToString(i) + ""; //LinkButton Text
lb.ID = Convert.ToString(i); // LinkButton ID’s
lb.CommandArgument = Convert.ToString(i); // LinkButton CommandArgument
lb.CommandName = Convert.ToString(i); // LinkButton CommanName
lb.OnClientClick+= new CommandEventHandler(lb_Command); //Create Handler for it.
//type lb.Command += and press double time Tab Key it will generat the lb_Command() code
 PlaceHolder1.Controls.Add(lb); // Adding the LinkButton in PlaceHolder
 }

这是函数代码。

void  lb_Command(object sender, CommandEventArgs e)
{
Label1.Text = e.CommandName; // will display the which Linkbutton clicked
Label1.Text = "aaaa";
//  Response.Redirect(“LnkBtn.aspx?val=” + Label1.Text); // you can also use as QueryString to send values to another page
}

请提供帮助。

谢谢。

最佳答案

您使用了错误的事件:

ClientClick 只是在 JavaScript 中触发的客户端事件。

你想要的是Click Event

[...]

lb.Click += new CommandEventHandler(lb_Command); //Create Handler for it.

如果您仍然没有捕获该事件,那么您很可能在页面生命周期中的错误时间动态声明了 LinkBut​​ton(正如 Eoin Campbell 在他的评论和回答中提到的那样)。

他链接到 article这对于这个主题来说非常好,您应该阅读它以了解为什么您没有 catch 该事件。

根据您对问题和不同答案的评论判断,您正在 Page_Load 函数中声明该按钮。这是行不通的,因为 Page_Load 在页面生命周期中发生得太晚。

据我了解,现在你有:

void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
          Int32 i; //create a integer variable
          for (i = 1; i <= 10; i++) // will generate 10 LinkButton
          {
              LinkButton lb = new LinkButton(); //create instance of LinkButton
              lb.Text = Convert.ToString(i) + ""; //LinkButton Text
              lb.ID = Convert.ToString(i); // LinkButton ID’s
              lb.CommandArgument = Convert.ToString(i); // LinkButton CommandArgument
              lb.CommandName = Convert.ToString(i); // LinkButton CommanName
              lb.OnClientClick+= new CommandEventHandler(lb_Command); //Create Handler for it.
              PlaceHolder1.Controls.Add(lb); // Adding the LinkButton in PlaceHolder
        }
    }
}

你需要摆脱它。相反,使用:

void Page_Init(object sender, EventArgs e)
{
    Int32 i; //create a integer variable
    for (i = 1; i <= 10; i++) // will generate 10 LinkButton
    {
         LinkButton lb = new LinkButton(); //create instance of LinkButton
         lb.Text = Convert.ToString(i) + ""; //LinkButton Text
         lb.ID = Convert.ToString(i); // LinkButton ID’s
         lb.CommandArgument = Convert.ToString(i); // LinkButton CommandArgument
         lb.CommandName = Convert.ToString(i); // LinkButton CommanName
         lb.OnClientClick+= new CommandEventHandler(lb_Command); //Create Handler for it.
         PlaceHolder1.Controls.Add(lb); // Adding the LinkButton in PlaceHolder
    }
}

上面链接的文章将解释原因。这是一个很难理解的概念,但却非常重要。

关于c# - 链接按钮的单击功能未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12300663/

相关文章:

asp.net - 我怎样才能让我的自动完成扩展器工作?

html - 我希望我的下拉菜单在单击链接而不是悬停时出现

c# - 如何从查询中删除所有参数的值

c# - 具有 HTTP 主机条件的 IIS UrlRewrite RewriteMap

asp.net - MasterPage 和 ContentPage Body Css 问题?

asp.net - SignalR ASP.NET MVC5 标识

c# - 如何在WPF DataGrid中选择DataGrid header 中的列的所有复选框

c# - 如何从另一个用户控件向窗体上的面板添加控件

javascript - 单击带有 target=_blank 的 LinkBut​​ton 后,如何防止回发在新窗口中打开?

c# - 如何从 GridView 在新选项卡中打开页面?