У меня есть следующие два обработчика событий с изображением в моем коде, для динамически добавленных кнопок изображения первое вызвано внутри события загрузки страницы, и обработчик события стреляет (хотя я знаю, что мне нужно будет переместить его из события загрузки страницы), вторая вызывается в предреактивном событии, и обработчик события не стреляет, когда нажимается кнопка. Вот код, первый (рабочий):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("   "));
}
}
}
}
}
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("   "));
}
}
}
}
}
catch (Exception ex)
{
//error handling...
}
}
protected void anEvent_Click(object sender, EventArgs e, String eventid)
{
Session["eventID"] = eventid;
Server.Transfer("Event.aspx");
}
Я предполагаю, что это что-то делать с объектом и отправителю не передается правильно, но я не знаю, как это сделать, не имея метода, вызванного в событии загрузки страницы, которое я не хочу делать, поскольку это означает, что кнопки исчезают при обратной передаче.
Любой совет будет очень благодарен, спасибо всем!
Извините, я должен был сказать более четко, что я пытаюсь выяснить, почему обработчик событий не стреляет во второй раздел кода. Благодаря! – Lamp