2015-02-09 71 views
1

我的代码中有以下两个图像按钮事件处理程序,对于动态添加的图像按钮,第一个在页面加载事件中调用,事件处理程序正在触发(虽然我知道我将需要将其移出页面加载事件),第二个在预渲染事件中被调用,并且当点击按钮时事件处理程序不会触发。 下面是代码,第一个(工作):asp.net,c#,图像按钮事件处理程序

protected void Page_Load(object sender, EventArgs e) 
{ 
    // check if user logged in 
    if (Session["userID"] == null) 
     Server.Transfer("login.aspx"); 

    else 
    { 
     try 
     { 
      // connect to db and get event info for user events 
      using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["UsersConnectionString1"].ConnectionString)) 
      { 
       using (SqlCommand command = new SqlCommand()) 
       { 
        command.Connection = connection; 
        command.CommandType = System.Data.CommandType.StoredProcedure; 
        command.CommandText = "GetUserEvents"; 
        command.Parameters.AddWithValue("@UserID", Session["UserID"]); 
        connection.Open(); 
        using (SqlDataReader reader = command.ExecuteReader()) 
        { 
         while (reader.Read()) 
         { 
          //System.Diagnostics.Debug.Write(reader[1].ToString()); 

          ImageButton anEvent = new ImageButton(); 
          String eventid = reader[0].ToString(); 
          anEvent.ImageUrl = ""; 
          anEvent.Click += delegate(object sender2, ImageClickEventArgs e2) { anEvent_Click(sender, e, eventid); }; 

          anEvent.ToolTip = (reader[1].ToString()) + "\n" + (reader[2].ToString()) + "\n" + (reader[3].ToString()) + "\n\n"; 

          Panel3.Controls.Add(anEvent); 
          Panel3.Controls.Add(new LiteralControl("&nbsp &nbsp")); 
         } 
        } 
       } 
      } 
     } 

     catch (Exception ex) 
     { 
      //error handling... 
     } 
    } 
} 

protected void anEvent_Click(object sender, EventArgs e, string eventid) 
{ 
    // create session variable to identify event info for event page for specific event user clicks on 
    Session["eventID"] = eventid;  
    Server.Transfer("Event.aspx");  
} 

第二(不工作):

protected override void OnPreRender(EventArgs e) 
{ 
    UpdateNewsFeed(); 
    LoadUserEvents(); 
} 


private void LoadUserEvents() 
{ 
    try 
    { 
     // connect to db and get event info for user events 
     using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["UsersConnectionString1"].ConnectionString)) 
     { 
      using (SqlCommand command = new SqlCommand()) 
      { 
       command.Connection = connection; 
       command.CommandType = System.Data.CommandType.StoredProcedure; 
       command.CommandText = "GetUserEvents"; 
       command.Parameters.AddWithValue("@UserID", Session["UserID"]); 
       connection.Open(); 
       using (SqlDataReader reader = command.ExecuteReader()) 
       { 
        while (reader.Read()) 
        { 
         //System.Diagnostics.Debug.Write(reader[1].ToString()); 

         ImageButton anEvent = new ImageButton(); 
         String eventid = reader[0].ToString(); 
         anEvent.Click += delegate(object sender2, ImageClickEventArgs e2) { anEvent_Click(sender2, e2, eventid); }; 
         anEvent.ImageUrl = reader[4].ToString(); 
         anEvent.ToolTip = (reader[1].ToString()) + "\n" + (reader[2].ToString()) + "\n" + (reader[3].ToString()) + "\n\n"; 

         EventsPanel.Controls.Add(anEvent); 
         EventsPanel.Controls.Add(new LiteralControl("&nbsp &nbsp")); 
        } 
       } 
      } 
     } 
    } 

    catch (Exception ex) 
    { 
     //error handling... 
    } 
} 

protected void anEvent_Click(object sender, EventArgs e, String eventid) 
{ 
    Session["eventID"] = eventid; 
    Server.Transfer("Event.aspx"); 
} 

我假设它的东西做的对象,而不是传递发件人正确的,但我不知道如何做到这一点,没有在页面加载事件中调用的方法,我不想这样做,因为这意味着按钮在回发消失。

任何意见将不胜感激,谢谢所有!

+0

对不起,我应该说得更清楚,我想知道的是为什么事件处理程序没有在第二部分代码中触发。谢谢! – Lamp 2015-02-09 10:01:31

回答

0

您在第二个示例中的page life cycle中添加的控件太晚(OnPreRender)。 。尝试PreInit作为MSDN推荐或InitLoad在更糟糕的情况下,您需要访问会话。

+0

谢谢jlvaquero。当我在页面加载事件中添加控件时,像第一部分代码那样,imagebutton click事件起作用,但我似乎无法在页面加载事件之外的任何地方添加控件,因为我似乎需要从发件人对象页面加载事件传递到buttonclick事件当我创建它...有没有办法从页面加载事件之外访问此发件人对象?再次感谢! – Lamp 2015-02-10 12:23:19

+0

据我所知,发件人在三个事件中是一样的 – jlvaquero 2015-02-10 13:27:36