【问题标题】:dynamicly created LinkButton onClick doesn't trigger onclick method动态创建的链接按钮 onClick 不会触发 onclick 方法
【发布时间】:2015-03-29 14:50:17
【问题描述】:

我正在使用以下代码在后面的代码中创建 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 只重新创建所需的按钮。

【问题讨论】:

    标签: c# asp.net linkbutton


    【解决方案1】:

    整个页面总是会重新加载。请记住,在提供页面后,不再有页面。当您单击一个按钮时,它会将所有内容传输回服务器。然后服务器启动页面,检查它的事件,然后处理适当的回发,例如链接按钮的点击事件。

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

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

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

    为了更容易处理,例如如果您让链接按钮对记录执行某些操作,您可能需要查看命令事件。这与单击的行为相同,但您可以访问 CommandName 和 CommendArgument,您可以在链接按钮上设置它们并用于传递所选记录的 ID 等信息。

    【讨论】:

    • 创建表的方法已经在 if(!IsPostBack) {CrateTables();)
    • 实际上,在阅读了您的帖子后,结果发现一个简单(不友好)的解决方案是删除 !page.ispostback。
    猜你喜欢
    • 2012-07-27
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    相关资源
    最近更新 更多