我正在开发一个在运行时加载LinkButton对象的用户控件(ascx)。当在Page_Load中加载aspx页面时,每个LinkButton的数据源是一个Dictionary的条目,例如((ferrari,2),(chevrolet,10),(jeep,6))随机排序。当用户单击LinkButton以执行PostBack以使用有关该项的其他信息查询数据库时。但是当执行到达事件时:
protected void objHyperLink_Click (object sender, EventArgs e)
不再是启动事件调用的相同项目,而是另一个项目。如何获得启动事件的正确对象?
由于
答案 0 :(得分:0)
鉴于您的问题上有评论主题,听起来您只希望随机分配在页面生命周期中发生一次,然后在您处理按钮单击之前阻止它再次随机化。你可以通过检查页面是否回发来做到这一点(这是在你点击其中一个按钮之后发生的事情,而服务器在它到达你的点击处理程序之前会经过页面生命周期)。
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
:“创建或重新创建动态控件。”Init
:“使用此事件来读取或初始化控件属性。”