2014-12-03 64 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