我正在 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.
如果您仍然没有捕获该事件,那么您很可能在页面生命周期中的错误时间动态声明了 LinkButton(正如 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/