none
动态生成的控件取值问题 RRS feed

  • 问题

  • Asp.Net页面上动态创建控件的状态维持

    在Asp.net后台代码创建一个控件对象,然后把它add到一个parent控件里,从而实现动态地创建页面控件,

    在页面回发时得到动态添加控件的值.该怎么解决???

    附代码:
      Panel Paneltemp = new Panel();
      Paneltemp.ID = "PS";
      for (int j = 0; j <5; j++) {
    TextBox txt = new TextBox();
    txt.ID = "txt_temp_" + j.ToString();
    Paneltemp.Controls.Add(txt);
    }
      PanelAuto.Controls.Add(Paneltemp);(PanelAuto是页面中存在的panel控件)

    页面初始后正常,
    在生成的文本框(txt_t_0)中输入值,回发后用下面的代码取值:
    ((TextBox)PanelAuto.FindControl("txt_t_0")).Text
    值为"";
    但回发后的页面还会显示刚刚输入的值.就是在后台获取不到.
    请帮助解决!万分感谢!!

    2009年1月9日 6:28

答案

  • 需要 重写LoadViewState和SaveViewState  去实现!

    参考文章:http://www.txink.com/Article/Override_LoadViewState_SaveViewState.aspx
    2009年1月10日 9:02
    版主
  • ((TextBox)PanelAuto.FindControl("txt_t_0")).Text肯定没有了。因为回发后你又重新创建了一个TextBox,而这个新的TextBox你还没有赋值。但是你在显示页面上却可以看到刚才的输入,那是因为控件ControlState的问题。
    你要想在page load里面获得刚才的数据,可以用Request.Form["
    txt_t_0"].
    2009年1月13日 7:55

全部回复

  • 经过N种尝试,多方资料,终于部分解决了

    只有在除PAGELOAD的其它事件中,才能获取到TextBox值

    TextBox类和其它类的区别是什么呢?

    为什么PAGELOAD事件中TextBox类型的值获取不到呢,

    其它类型的控件确可以呢,等待此问题进一步深化

    希望大家共同研究!!
    2009年1月9日 8:55
  •  

      Panel Paneltemp = new Panel();
      Paneltemp.ID = "PS";
      for (int j = 0; j <5; j++) {
    TextBox txt = new TextBox();
    txt.ID = "txt_temp_" + j.ToString();
    Paneltemp.Controls.Add(txt);
    }

      PanelAuto.Controls.Add(Paneltemp);(PanelAuto是页面中存在的panel控件)

     

     

    这段代码放在哪里了?

    2009年1月9日 15:50
  • 需要 重写LoadViewState和SaveViewState  去实现!

    参考文章:http://www.txink.com/Article/Override_LoadViewState_SaveViewState.aspx
    2009年1月10日 9:02
    版主
  • 在page_load事件中
    2009年1月12日 0:18
  • ((TextBox)PanelAuto.FindControl("txt_t_0")).Text肯定没有了。因为回发后你又重新创建了一个TextBox,而这个新的TextBox你还没有赋值。但是你在显示页面上却可以看到刚才的输入,那是因为控件ControlState的问题。
    你要想在page load里面获得刚才的数据,可以用Request.Form["
    txt_t_0"].
    2009年1月13日 7:55
  • 很好,很强大

     

    谢谢

    2009年1月14日 0:11