本人设想点击一个静态的服务器端按钮后,得到由PageLoad事件中生成的TextBox的Text值,请问能否实现?我得理解是:点击服务器端按钮后,会先进行回调,但一回调动态生成的TextBox就没了,值肯定也得不到了。

解决方案 »

  1.   

    最笨的办法是:用 Request.Form
      

  2.   

    你 在设置TextBox时在页面上放置一个Hidden控件,保持TextBox的值。
      

  3.   

    上面方法不行或是本人能力有限代码如下:
    private void Page_Load(object sender, System.EventArgs e)
    {
    TextBox tb=new TextBox();
    tb.ID="txt_gwgs"+(i).ToString();
    tb.Width=System.Web.UI.WebControls.Unit.Percentage(70);
    tb.EnableViewState=true;
    p_gwgs.Controls.Add(tb);
    TextBox tb_ex=(TextBox)Form1.FindControl("txt_gwgs"+gwgsCount.ToString());
    tb_ex.text;//值为空,不知为何。在回调前我是录入了值的
    }
      

  4.   

    >>>点击服务器端按钮后,会先进行回调,但一回调动态生成的TextBox就没了正确的做法是,在Page_Load或之前重新生成这个TextBox,这样,在PostBack之后,这个TextBox还会存在,你也可以在按钮的Click事件函数里得到这个TextBox的值,否则的话,你可以用Request.Form[YourTextBox.UniqueID]

    Request.Form["YourTextBoxName"]的方法来获取它的值
      

  5.   

    >>>tb_ex.text;//值为空,不知为何。在回调前我是录入了值的因为你的对象是在Page_Load里生成的,在Page_Load里用普通的方法是得不到其值的,参考我的blog里有关动态对象的几个帖子http://blog.joycode.com/saucer
      

  6.   

    思归的话很有道理,哦的 意思是你在给TextBox赋值的时候也给隐藏控件赋值。没有什么问题,我经常都是这样用的,不过有时也在按钮的事件用
    TextBox tb_ex=(TextBox)Form1.FindControl("txt_gwgs"+gwgsCount.ToString());
    因为它的值是通过ViewState 保存的。
      

  7.   

    在PostBack时,将控件重新生成就可以了,但此时不要赋值 !!