2014-12-03 62 views
0

場景: 我已經通過後面的c#代碼動態地向我的頁面添加了一個asp文本框控件。 我有一個刪除該文本框的按鈕,用文本框中的lbl文本替換它。如何保持動態控制屬性

問題: 當我按下按鈕時,page_init-> page_load-> page_prerender序列啓動,擦除我的文本框控件。

我通過page_prerender中的方法初始化文本框。

我可以使用viewstate來保存值,但看到有一個啓用視圖狀態等。什麼是標準方式持久動態控制textbox.text屬性跨回發?

代碼,我至今

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 

    } 
    else 
    { 
     add_tb(); 
    } 
} 

private void add_tb() 
{ 
    Textbox tb = new Textbox(); 
    pnlButtons.add(tb); //this is a panel init'd at design time which also includes a button 
} 
protected void imgBtn_Click_home(object sender, ImageClickEventArgs e) 
{ 
    lblTest.Text=tb.Text; // where do i declare the tb to access it from here and to persist it? 
} 

而且,我在哪裏可以申報TB從這裏訪問它,並堅持呢?

回答

1

您不顯示代碼。我會用言語回答你。

你應該總是添加控件,這在CreateChildControl Method

TextBox txt; 

    protected override void CreateChildControls() 
    { 
     base.CreateChildControls(); 

     txt = new TextBox(); 
     txt.ID = "textBoxTest"; 
     txt.Visible = false; 

     pnlButtons.add(txt); // till now pnlButtons should be created because you call first for base.CreateChildControls 
    } 

發生的事情。如果你想在某些情況下沒有「補充」控制你只要把默認他上可見的僞。

後,當你要的OnPreRender

protected override void OnPreRender(EventArgs e) 
    { 
     base.OnPreRender(e); 
     if(condition)//condition is when you show your checkbox 
     { 
      txt.Visible = true; 
      lblTest.Visible = false; 
     } 
     else 
     { 
      lblTest.Visible = true; 
      txt.Visible = false; 
     } 
    } 

請在右側框控件中可見。當控件可見時,他不會被添加到頁面中。您可以查看頁面的源代碼。之後,就不會出現像你這樣的問題!

+0

thx男人,你能否詳細說明我發佈的問題? – Fearghal 2014-12-03 20:07:52

+0

@Fearghal你需要類似的東西。 – mybirthname 2014-12-03 20:15:30

+0

嗯檢查出來 - 理想情況下,我希望頁面回來的文本框,但可能有其他的併發症,我並沒有包括在問題中,爲清晰起見。我有一個自定義控件,其中的一部分是一個文本框。文本框中有用戶輸入的文本,並且點擊了一個按鈕 - 我需要該文本,但由於刷新而失去了客戶控制權(並且包含文本框)。上面看看是否有幫助。明天再回答。 – Fearghal 2014-12-03 20:23:08