2011-12-25 35 views
1

在以下代码中,asp不会输入动作侦听器(Button1_Click)。 任何人都可以帮忙吗?事件处理程序不会被调用

protected void Project_Click(object sender, EventArgs e) 
    { 
     Courses.ActiveViewIndex = 0; 

     String ConnStr = ConfigurationManager.ConnectionStrings["MyRuMoR"].ToString(); 
     SqlConnection conn = new SqlConnection(ConnStr); 
     conn.Open(); 
     SqlCommand cmd = new SqlCommand("ViewProjects", conn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add("@course_code", "PHYS305"); 

     SqlDataReader rdr = cmd.ExecuteReader(); 

     int c = 1; 

     while (rdr.Read()) 
     { 
      String name = rdr.GetString(rdr.GetOrdinal("name")); 
      int p_id = rdr.GetInt32(rdr.GetOrdinal("p_id")); 

      LinkButton lb = new LinkButton(); 
      lb.ID = p_id.ToString(); 

      lb.Text = "Project " + c + " is: " + name; 
      form1.Controls.Add(lb); 

      lb.Click += new EventHandler(this.Button1_Click); 

      c++; 
     } 
     conn.Close(); 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     Response.Write("Hello"); 
    } 
+0

你的意思是事件处理程序。动作侦听器是一个Java概念。 – Oded 2011-12-25 12:24:14

+2

你最好改变你的逻辑,改用Repeater,在'Project_Click'方法中绑定它的数据源。 – 2011-12-25 12:28:05

回答

3

您需要阅读ASP.NET page lifecycle

当谈到动态控制时,您需要在回发时重新创建,否则它们将不存在,并且附加的事件处理程序不会触发。

动态控制最好在页面的PreInit事件中创建。

如上所述here

protected virtual void OnPreInit(EventArgs e) 
{ 
    base.OnPreInit(e); 
    //your code 
} 
+0

不在init但PreInit中。 http://msdn.microsoft.com/en-us/library/ms178472.aspx – 2011-12-25 13:55:21

+0

Toda @RoyiNamir :) – Oded 2011-12-25 13:58:18

+0

:) ............ – 2011-12-25 14:01:48

0

你必须把所有或代码的创建页面生命周期,这样的事情

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    LinkButton lb = new LinkButton(); 
    lb.ID = p_id.ToString(); 

    lb.Text = "Project " + c + " is: " + name; 
    form1.Controls.Add(lb); 

    lb.Click += new EventHandler(this.Button1_Click); 
} 

随后的Pre_Init事件中动态控制部分只有它会达到你想要的。

相关问题