我的代码中有以下两个图像按钮事件处理程序,对于动态添加的图像按钮,第一个在页面加载事件中调用,事件处理程序正在触发(虽然我知道我将需要将其移出页面加载事件),第二个在预渲染事件中被调用,并且当点击按钮时事件处理程序不会触发。 下面是代码,第一个(工作):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("   "));
}
}
}
}
}
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 2015-02-09 10:01:31