ASP.NET 链接按钮

ASP.NET LinkButton

我正在开发一个在运行时加载 LinkBut​​ton 对象的用户控件 (ascx)。当aspx页面在Page_Load加载时,每个LinkBut​​ton的数据源是一个Dictionary的条目,例如((ferrari, 2), (chevrolet, 10), (jeep, 6))随机排序.当用户单击 LinkBut​​ton 执行 PostBack 以使用有关该项目的附加信息查询数据库时。但是当执行到事件时:

protected void objHyperLink_Click (object sender, EventArgs e)

不再是启动事件调用的同一项目,而是不同的项目。如何获取启动事件的正确对象?

谢谢

鉴于您的问题的评论线程,听起来您只希望随机分配在页面生命周期中发生一次,然后在您处理按钮点击之前阻止它再次随机化。您可以通过检查页面是否正在回发来做到这一点(这是在您单击其中一个按钮后发生的情况,并且服务器在到达您的点击处理程序之前返回页面生命周期)。

Icemanind 建议将这项工作移出 Page_Load,这可能是个好主意,但您仍然需要相同的 IsPostBack 检查。

public void Page_PreInit(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // create buttons
    }
}

public void Page_Init(object sender, EventArgs e)
{
    // The buttons exist, now assign events to them
}

我建议阅读臭名昭著的 ASP.NET Page Life Cycle Overview MSDN 文章,以更好地了解您应该在哪些页面事件中执行某些操作。

利用上面文章的节选,你就知道我为什么用上面的方法了:

  • PreInit: "Create or re-create dynamic controls."
  • Init: "Use this event to read or initialize control properties."