动态创建链接按钮onClick不会触发onclick方法

时间:2015-03-29 14:50:17

标签: c# asp.net linkbutton

我正在使用以下代码在代码中创建X链接按钮:

HTML:

<div runat="server" id="div_tables">

</div>               

后端:

LinkButton lnkB = new LinkButton();
lnkB.ID ="LB" + row.ItemArray[1].ToString() + row.ItemArray[2].ToString();
lnkB.Text = "Link to episode";
lnkB.Attributes.Add("runat", "server");
lnkB.Click += new EventHandler(lb_Clicked);
div_tables.Controls.Add(lnkB);   

OnClick方法:

protected void lb_Clicked(object sender, EventArgs e)
{
  LinkButton b = sender as LinkButton;
  b.Text = "ASD";
}

在链接按钮上单击整个页面重新加载而不是仅使用lb_Clicked方法。我确定这是一个基本的链接按钮问题,但我真的希望有人可以帮助我。 提前谢谢

编辑,发现这篇文章提供了解决问题的方法: Can't call Click Event on dynamic button

正如Mark所说,数据在页面加载时丢失了。这篇文章建议使用viewstate只重新创建所需的按钮。

1 个答案:

答案 0 :(得分:0)

整个页面将始终重新加载。请注意,在提供页面后,不再有页面了。当您单击按钮时,它会将所有内容传回服务器。然后服务器旋转页面,浏览它的事件,然后处理相应的回发,例如linkbutton的点击事件。

如果您想确保某些其他代码未运行,例如OnLoad中的代码,则必须将其括在if语句中,例如:

if(!Page.IsPostBack)
{
   // only do things the first time the page is laoded.
}

此外,在创建动态控件时,每次页面回发时都必须重新创建动态控件,并且在页面的生命周期中足够早,它们实际上及时存在以接收回发事件。 OnLoad或OnPreLoad是您应该执行此操作的最新事件(不要在OnLoad之后使用Page_Load,并且通常为时已晚)。

为了便于处理,例如,如果您使用linkbutton对记录执行某些操作,则可能需要查看命令事件。这样做就像点击一样,但是您可以访问CommandName和CommendArgument,您可以在linkbutton上设置它,并用于传递所选记录的ID等信息。