TextBox t1 = new TextBox();
t1.ID = "t12";//根据这个ID来认控件, 而不是实例名t1

解决方案 »

  1.   

    动态生成的textbox有个ID值,只能根据这个识别控件
      

  2.   

    不好意思,刚才漏了动态生成一textbox:t1且赋值t1.text="aaa"
    TextBox text= new TextBox();
    text.Id="t1"
    text.text="aaa"
      

  3.   

    我当然知道这个ID啦,问题没这么简单,它的值真的改变不了,尽管在调试窗口是改变了,但回到页面就变回"aaa"了,另外背景色却可以改变,大家看看,我费了大半天了,搞不定
      

  4.   

    the following works for me:
    <%@ Import Namespace="System.Drawing" %>
    <script language="C#" runat="server">
    void Page_Load(Object o, EventArgs e)
    {
      TextBox tb = new TextBox();
      tb.ID = "t1";
      form1.Controls.Add(tb);
      if (!IsPostBack)
    tb.Text = "aaa";
    }void Change(Object o, EventArgs e)
    {
      TextBox tb = (TextBox)this.FindControl("t1");
      tb.Text = "bbb";
      tb.BackColor = Color.Red;
    }
    </script>
    <form id="form1" runat="server"><asp:Button id="btn" Text="Change" runat="Server" OnClick="Change" />
    <asp:Button id="btn2" Text="Refresh" runat="Server" />
    </form>
      

  5.   

    忘了重要的一点
    1.刚进入页面时(动态生成t1)
      动态生成一textbox:t1且赋值t1.text="aaa"
    2.submit()后(动态生成t1,再改变其值)
      动态生成一textbox:t1且赋值t1.text="aaa"
      改变t1值(改变不了)我整理一下,马上贴上来
      

  6.   

    the following works for me:
    <%@ Import Namespace="System.Drawing" %>
    <script language="C#" runat="server">
    void Page_Load(Object o, EventArgs e)
    {
      TextBox tb = new TextBox();
      tb.ID = "t1";
      form1.Controls.Add(tb);
      if (!IsPostBack)   --------------这句去掉,先赋值"aaa"-----------------1
    tb.Text = "aaa";
    }void Change(Object o, EventArgs e)
    {
      TextBox tb = (TextBox)this.FindControl("t1");
      tb.Text = "bbb";    --------------先赋值"aaa"后,这边其实赋不了值-------2
      tb.BackColor = Color.Red;---------这边却能正常改变颜色-----------------3
    }
    </script>
    <form id="form1" runat="server"><asp:Button id="btn" Text="Change" runat="Server" OnClick="Change" />
    <asp:Button id="btn2" Text="Refresh" runat="Server" />
    </form>
    为什么呢?有没有好方法呀?
      

  7.   

    <%@ Import Namespace="System.Drawing" %>
    <script language="C#" runat="server">
    void Page_Load(Object o, EventArgs e)
    {
      TextBox tb = new TextBox();
      tb.ID = "t1";
      form1.Controls.Add(tb);
      tb.Text = "aaa";
    }void Change(Object o, EventArgs e)
    {
      TextBox tb = (TextBox)this.FindControl("t1");
      tb.Text = "bbb";   
      tb.BackColor = Color.Red;
    }</script>
    <form id="form1" runat="server"><asp:Button id="btn" Text="Change" runat="Server" OnClick="Change" />
    <asp:Button id="btn2" Text="Refresh" runat="Server" />
    </form>在我机器上的效果: 先是"aaa",按按扭后变成"bbb",背景也变成红色
      

  8.   

    submit后是先重新生成页面,再赋值已经改变不了。
    加上 t1.EnableViewState=false;
      

  9.   

    实例:页面上有一button
    vb:    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        Dim textbox As System.Web.UI.WebControls.TextBox
            textbox = New System.Web.UI.WebControls.TextBox()
            textbox.ID = "t1"
            textbox.Text = "aaa"
            Me.FindControl("Form1").Controls.Add(textbox)
            If IsPostBack Then
                Dim tx As System.Web.UI.WebControls.TextBox
                tx = CType(Me.FindControl("t1"), System.Web.UI.WebControls.TextBox)
                tx.Text = "bbb"
            End If
        End Sub大家给给意见呀?
      

  10.   

    to:思归我没有试你的代码,我的代码我贴出来了(vb的),大家看看,试试就知道了Public Class pp
        Inherits System.Web.UI.Page
        Protected WithEvents Button1 As System.Web.UI.WebControls.Button#Region     <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()    End Sub    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init        InitializeComponent()
        End Sub#End Region    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        Dim textbox As System.Web.UI.WebControls.TextBox
            textbox = New System.Web.UI.WebControls.TextBox()
            textbox.ID = "t1"
            textbox.Text = "aaa"        Me.FindControl("Form1").Controls.Add(textbox)
            If IsPostBack Then
                Dim tx As System.Web.UI.WebControls.TextBox
                tx = CType(Me.FindControl("t1"), System.Web.UI.WebControls.TextBox)
                tx.Text = "bbb"
            End If
        End SubEnd Class
      

  11.   

    not, it doesn't work that way, since for dynamic controls created in Page_Load, ProcessPostData() run after Page_Load will restored those values from PostBack, try to set it in Page_Rendersee
    http://www.aspalliance.com/PaulWilson/Articles/?id=6
      

  12.   

    我在动态加载用户控件的时候也碰到类似问题,下面是我的总结服务端控件(包括用户控件)的PostBack数据的恢复:
    若用户控件是设计时直接放置到页面的或者是在代码中在Page_iInit() 事件中载入的,那么用户控件中的控件的PostBack的值将会顺利的在用户控件Page_Load事件前得到恢复(比如DropDownList的SelectedIndex)。但是如果这个用户控件是在页面的代码中的Page_Load()事件中载入的,那么在此用户控件的Page_Load事件时用户控件中的控件的PostBack的值还没有得到恢复,要到其他客户触发事件时或到用户控件的Page_PreRender时才能得到恢复。(这个跟msdn中描述的控件的生命周期的说法是不一致的)
      

  13.   

    to:思归我晕,Page_Render是什么呀
      

  14.   

    将:
    Dim textbox As System.Web.UI.WebControls.TextBox
            textbox = New System.Web.UI.WebControls.TextBox()
            textbox.ID = "t1"
            textbox.Text = "aaa"        Me.FindControl("Form1").Controls.Add(textbox)这部分代码放到Page_Init()事件中就可以了
      

  15.   

    <%@ Import Namespace="System.Drawing" %>
    <script language="C#" runat="server">
    void Page_Load(Object o, EventArgs e)
    {
      TextBox tb = new TextBox();
      tb.ID = "t1";
      form1.Controls.Add(tb);
      tb.Text = "aaa";
    }void Page_PreRender(Object o, EventArgs e)
    {
      if (IsPostBack)
      {
       TextBox tb = (TextBox)this.FindControl("t1");
       tb.Text = "bbb";   
       tb.BackColor = Color.Red;
      }
    }</script>
    <form id="form1" runat="server">
    <asp:Button id="btn2" Text="Refresh" runat="Server" />
    </form>
      

  16.   

    再次感谢两位,问题暂已解决Public Class pp
        Inherits System.Web.UI.Page
        Protected WithEvents Button1 As System.Web.UI.WebControls.Button#Region     <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()    End Sub    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init        InitializeComponent()        Dim textbox As System.Web.UI.WebControls.TextBox
            textbox = New System.Web.UI.WebControls.TextBox()
            textbox.ID = "t1"
            textbox.Text = "aaa"
            Me.FindControl("Form1").Controls.Add(textbox)    End Sub#End Region    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        If IsPostBack Then
                Dim tx As System.Web.UI.WebControls.TextBox
                tx = CType(Me.FindControl("t1"), System.Web.UI.WebControls.TextBox)
                tx.Text = "bbb"
            End If
        End SubEnd Class结帖
      

  17.   

    sorry, should be PreRender
      

  18.   

    这是个控件生命周期的事件顺序问题,象控件取得postback的值在msdn是说在page_load事件之前的,直接放置的控件和在page_init中动态加载的控件也的确是这样的,但是在page_load事件动态加载的控件的postback值就在page_load事件前没有得到恢复而是到page_load事件之后才恢复,这就造成了一些不便和疑惑.我觉得这个应该算是个bug
      

  19.   

    在别的事件中这样写没有什么问题,Page_Load()事件 有些不同,以前就这郁闷了老半天,发现在page_load事件后会自动恢复,总算搞到答案了