链接按钮的点击功能未被呼叫

时间:2012-09-06 12:58:05

标签: 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
}

请提供帮助。

感谢。

5 个答案:

答案 0 :(得分:3)

您使用的是错误的事件:

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

你想要的是Click Event

[...]

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

如果你还没有捕捉到这个事件,那么你很有可能在页面生命周期的错误时间动态声明你的LinkBut​​ton(正如Eoin Campbell在他的评论和答案中所提到的那样)。

他链接到一个关于这个主题非常好的article,你应该阅读它以理解为什么你没有抓住这个事件。

根据您对问题的评论和不同的答案判断,您在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
    }
}

上面链接的文章将解释为什么会这样。这是一个难以掌握的概念,但却是一个非常重要的概念。

答案 1 :(得分:2)

您正在混合客户端和服务器端代码。 OnClientClick是附加客户端代码的方法。 lb_Command在服务器端运行。

使用Click代替。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.onclientclick.aspxhttp://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.click.aspx

答案 2 :(得分:1)

确定。两件事情。正如其他人指出您应该使用LinkButton CommandClick处理程序。

但您的第二个问题是,您尝试仅生成控件时遇到了Page Life Cycle问题

  1. on if(!Postback)
  2. Page_Load
  3. 阅读本文:这是一篇关于这个主题的非常好的文章,可以追溯到.net 1 http://www.4guysfromrolla.com/articles/092904-1.aspx

    简而言之,您应该每次都创建控件(而不仅仅是在初始帖子上),并且您需要在页面生命周期中尽早连接事件处理程序(+=部分),以便当PageLifeCycle尝试触发它们时,事件是有线的。

    覆盖网页的OnInit方法并将代码移到那里,而不进行if(!Postback)检查

答案 3 :(得分:0)

而不是下面的代码

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

使用以下

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

这是完整的代码。它在我的最后运行。

    protected void Page_Load(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) + "&nbsp;"; //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.Click += lb_Click; //Create Handler for it.
            lb.Command += lb_Command;
            //type lb.Command += and press double time Tab Key it will generat the lb_Command() code 
            form1.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             
    }

感谢。

答案 4 :(得分:-1)