ASP.NET 链接按钮
ASP.NET LinkButton
我正在开发一个在运行时加载 LinkButton 对象的用户控件 (ascx)。当aspx页面在Page_Load加载时,每个LinkButton的数据源是一个Dictionary的条目,例如((ferrari, 2), (chevrolet, 10), (jeep, 6))随机排序.当用户单击 LinkButton 执行 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."
我正在开发一个在运行时加载 LinkButton 对象的用户控件 (ascx)。当aspx页面在Page_Load加载时,每个LinkButton的数据源是一个Dictionary的条目,例如((ferrari, 2), (chevrolet, 10), (jeep, 6))随机排序.当用户单击 LinkButton 执行 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."