2016-03-03 53 views
2

我已經創建了動態按鈕點擊Label控件:檢索值

protected void createDynamicLabels_Click(object sender, EventArgs e) 
{ 
    int n = 5; 
    for (int i = 0; i < n; i++) 
    { 
     Label MyLabel = new Label(); 
     MyLabel.ID = "lb" + i.ToString(); 
     MyLabel.Text = "Labell: " + i.ToString(); 
     MyLabel.Style["Clear"] = "Both"; 
     MyLabel.Style["Float"] = "Left"; 
     MyLabel.Style["margin-left"] = "100px"; 

     Panel1.Controls.Add(MyLabel); 
    } 
} 

當我想讀回來回另一個按鈕我看到標籤控件返回null

Label str =(Label)Panel1.FindControl(「lb」+ i.ToString());

不知道哪裏出了問題在這裏只,直到下一個回傳

protected void bReadDynValue_Click(object sender, EventArgs e) 
{ 

    int n = 5; 
    for (int i = 0; i < n; i++) 
    { 
     Label str = (Label)Panel1.FindControl("lb" + i.ToString()); 
     lbGetText.Text = str.Text; 
    } 


} 

回答

0

動態創建的標籤存在。當你點擊另一個按鈕來檢索它們的值時,發生回發並且值變爲空。

爲了在回發後保存標籤狀態,您必須使用一些隱藏字段。

+0

感謝您的回覆 – Ashok

1

這是每次頁面加載事件的問題。每次點擊任何按鈕時,ASP.net都會觸發頁面加載事件。

在這個例子中假設..

protected void Page_Load(object sender, EventArgs e) 
{ 

    if(!IsPostBack) 
     createDynamicLabels(); 
} 


private void createDynamicLabels() 
    { 
     int n = 5; 
     for (int i = 0; i < n; i++) 
     { 
      Label MyLabel = new Label(); 
      MyLabel.ID = "lb" + i.ToString(); 
      MyLabel.Text = "Labell: " + i.ToString(); 
      MyLabel.Style["Clear"] = "Both"; 
      MyLabel.Style["Float"] = "Left"; 
      MyLabel.Style["margin-left"] = "100px"; 

      Panel1.Controls.Add(MyLabel); 


     } 
    } 

protected void bReadDynValue_Click(object sender, EventArgs e) 
{ 

    int n = 5; 
    for (int i = 0; i < n; i++) 
    { 
     Label str = (Label)Panel1.FindControl("lb" + i.ToString()); 
     lbGetText.Text = str.Text; 
    } 


} 

時,因爲它是在運行時由按鍵觸發頁面沒有任何標籤。和Page沒有找到特定的標籤。如果你嘗試了上面的代碼,它可以正常運行。

protected void Page_Load(object sender, EventArgs e) 
{ 

     createDynamicLabels(); 
} 


private void createDynamicLabels() 
    { 
     int n = 5; 
     for (int i = 0; i < n; i++) 
     { 
      Label MyLabel = new Label(); 
      MyLabel.ID = "lb" + i.ToString(); 
      MyLabel.Text = "Labell: " + i.ToString(); 
      MyLabel.Style["Clear"] = "Both"; 
      MyLabel.Style["Float"] = "Left"; 
      MyLabel.Style["margin-left"] = "100px"; 

      Panel1.Controls.Add(MyLabel); 


     } 
    } 

protected void bReadDynValue_Click(object sender, EventArgs e) 
{ 

    int n = 5; 
    for (int i = 0; i < n; i++) 
    { 
     Label str = (Label)Panel1.FindControl("lb" + i.ToString()); 
     lbGetText.Text = str.Text; 
    } 


} 

在這個例子中的代碼每次都找到標籤,因爲它每次都可以爲這個頁面做標籤。

+0

謝謝,我想要做2個不同的按鈕來生成動態控件並檢索其值。但由於回發我使用2個按鈕不起作用的想法。再次感謝 – Ashok

+0

@Ashok爲什麼不使用按鈕事件處理函數調用else語句(!isPostback)..它可以這樣工作..如果你想用2個按鈕做 –

+1

但是首先調用Page_Load/postback,怎麼做我知道它是在點擊按鈕上? – Ashok

0

如果實驗室的文本/值沒有改變,就足以在每次回發時生成它們(如mck已經提到)。如果您需要檢索客戶端所做的更改,則應該在OnInit事件中創建控件,而不是PageLoad,並使用輸入/ texbox而不是標籤。

另一種選擇(我會建議)將使用一個asp:Repeater來生成標籤。