实例:页面上有一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大家给给意见呀?
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
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
再次感谢两位,问题暂已解决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结帖
TextBox text= new TextBox();
text.Id="t1"
text.text="aaa"
<%@ 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>
1.刚进入页面时(动态生成t1)
动态生成一textbox:t1且赋值t1.text="aaa"
2.submit()后(动态生成t1,再改变其值)
动态生成一textbox:t1且赋值t1.text="aaa"
改变t1值(改变不了)我整理一下,马上贴上来
<%@ 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>
为什么呢?有没有好方法呀?
<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",背景也变成红色
加上 t1.EnableViewState=false;
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大家给给意见呀?
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
http://www.aspalliance.com/PaulWilson/Articles/?id=6
若用户控件是设计时直接放置到页面的或者是在代码中在Page_iInit() 事件中载入的,那么用户控件中的控件的PostBack的值将会顺利的在用户控件Page_Load事件前得到恢复(比如DropDownList的SelectedIndex)。但是如果这个用户控件是在页面的代码中的Page_Load()事件中载入的,那么在此用户控件的Page_Load事件时用户控件中的控件的PostBack的值还没有得到恢复,要到其他客户触发事件时或到用户控件的Page_PreRender时才能得到恢复。(这个跟msdn中描述的控件的生命周期的说法是不一致的)
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()事件中就可以了
<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>
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结帖