2015-02-09 2 views
1

У меня есть следующие два обработчика событий с изображением в моем коде, для динамически добавленных кнопок изображения первое вызвано внутри события загрузки страницы, и обработчик события стреляет (хотя я знаю, что мне нужно будет переместить его из события загрузки страницы), вторая вызывается в предреактивном событии, и обработчик события не стреляет, когда нажимается кнопка. Вот код, первый (рабочий):asp.net, C#, Image Button Event Handler

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

ответ

0

Вы добавляете элементы управления слишком поздно (OnPreRender) в page life cycle во втором примере. , Попробуйте PreInit в качестве рекомендации MSDN или Init или Load в худшем случае вам нужно получить доступ к сеансу.

+0

Спасибо jlvaquero. Событие clickbutton click работает, когда я добавляю элементы управления в событие загрузки страницы, как в первом разделе кода, но я не могу добавить элементы управления где-либо вне события загрузки страницы, потому что мне кажется, что объект отправителя событие загрузки страницы, чтобы передать событие buttonclick, когда я его создаю ... есть ли способ получить доступ к этому объекту-отправителю из-за события загрузки страницы? Еще раз спасибо! – Lamp

+0

Насколько я знаю, отправитель является одним и тем же в трех событиях – jlvaquero