textbox赋值问题,百思不得其解?

yuosh 2003-08-20 11:56:03
动态生成一textbox:t1且赋值t1.text="aaa"


然后改变其值和颜色
CType(Me.FindControl("t1"), System.Web.UI.WebControls.TextBox).text="bbb"
CType(Me.FindControl("t1"), System.Web.UI.WebControls.TextBox).backcolor=color.red
在调试程序时跟踪,在断点处t1.text的值是改为bbb了,但一到页面,t1的值还是aaa,其颜色却是改变了,为什么?怎样使t1.text的值改变?
不要告诉我"
If IsPostBack = True Then
Else
EndIf
"
...全文
219 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuosh 2003-08-20
  • 打赏
  • 举报
回复
谢谢两位,有好的方法解决吗?
yuosh 2003-08-20
  • 打赏
  • 举报
回复
to:思归

我晕,Page_Render是什么呀
chnking 2003-08-20
  • 打赏
  • 举报
回复
我在动态加载用户控件的时候也碰到类似问题,下面是我的总结

服务端控件(包括用户控件)的PostBack数据的恢复:
若用户控件是设计时直接放置到页面的或者是在代码中在Page_iInit() 事件中载入的,那么用户控件中的控件的PostBack的值将会顺利的在用户控件Page_Load事件前得到恢复(比如DropDownList的SelectedIndex)。但是如果这个用户控件是在页面的代码中的Page_Load()事件中载入的,那么在此用户控件的Page_Load事件时用户控件中的控件的PostBack的值还没有得到恢复,要到其他客户触发事件时或到用户控件的Page_PreRender时才能得到恢复。(这个跟msdn中描述的控件的生命周期的说法是不一致的)
saucer 2003-08-20
  • 打赏
  • 举报
回复
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_Render

see
http://www.aspalliance.com/PaulWilson/Articles/?id=6
yuosh 2003-08-20
  • 打赏
  • 举报
回复
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 Sub

End Class
yuosh 2003-08-20
  • 打赏
  • 举报
回复
实例:页面上有一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

大家给给意见呀?
gangganghao 2003-08-20
  • 打赏
  • 举报
回复
上面程序已经实现了你说的效果。。

不知你是什么问题。。
jjcccc 2003-08-20
  • 打赏
  • 举报
回复
submit后是先重新生成页面,再赋值已经改变不了。
加上 t1.EnableViewState=false;
saucer 2003-08-20
  • 打赏
  • 举报
回复
<%@ 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",背景也变成红色
saucer 2003-08-20
  • 打赏
  • 举报
回复
are you sure??
yuosh 2003-08-20
  • 打赏
  • 举报
回复
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>


为什么呢?有没有好方法呀?
yuosh 2003-08-20
  • 打赏
  • 举报
回复
to:思归
这样是可以的,但我想知道,难道不能赋值后再重新赋值吗(在你的例子中,是在动态生成时赋不同的值呀,而我是想重新赋值,不然代码改动太大,有没有其它办法)?
yuosh 2003-08-20
  • 打赏
  • 举报
回复
忘了重要的一点
1.刚进入页面时(动态生成t1)
动态生成一textbox:t1且赋值t1.text="aaa"
2.submit()后(动态生成t1,再改变其值)
动态生成一textbox:t1且赋值t1.text="aaa"
改变t1值(改变不了)

我整理一下,马上贴上来
saucer 2003-08-20
  • 打赏
  • 举报
回复
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>
zjw19 2003-08-20
  • 打赏
  • 举报
回复
重起机器试试。
chnking 2003-08-20
  • 打赏
  • 举报
回复
把你的所有代码贴出来吧
yuosh 2003-08-20
  • 打赏
  • 举报
回复
我当然知道这个ID啦,问题没这么简单,它的值真的改变不了,尽管在调试窗口是改变了,但回到页面就变回"aaa"了,另外背景色却可以改变,大家看看,我费了大半天了,搞不定
yuosh 2003-08-20
  • 打赏
  • 举报
回复
不好意思,刚才漏了

动态生成一textbox:t1且赋值t1.text="aaa"
TextBox text= new TextBox();
text.Id="t1"
text.text="aaa"



acewang 2003-08-20
  • 打赏
  • 举报
回复
动态生成的textbox有个ID值,只能根据这个识别控件
panyee 2003-08-20
  • 打赏
  • 举报
回复
TextBox t1 = new TextBox();
t1.ID = "t12";//根据这个ID来认控件, 而不是实例名t1
加载更多回复(8)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧