2011-12-25 65 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事件中動態控制部分只有它會達到你想要的。

相關問題