关于ASP.NET页面生命周期的疑惑

netsyt 2007-11-19 11:56:11
最近看ASP.NET页面生命周期
我看的文章说过程是
1. Page_Init();
2. Load ViewState;
3. Load Postback data;
4. Page_Load();
5. Handle control events;
6. Page_PreRender();
7. Page_Render();
8. Unload event;
9. Dispose method called;

大家看下面代码
protected void Page_Load(object sender, EventArgs e)
{
Add();
}
private void Add()
{
TextBox td = new TextBox();
td.ID = "ID1";
this.DIVID.Controls.Add(td);
}
protected void OK_OnClick(object sender, EventArgs e)
{
TextBox con = (TextBox)this.form1.FindControl("ID1");
if (con != null)
{
string ddds = con.Text;
}
}


问题是每次Add()添加textbox这样可以找到textbox
并能获得他的值
在生命周期上看 load事件 和用户事件为 4 5 两步
问题就是 我没此在第4步load事件中添加新的textbox
在第5步用户事件中我理解是可以找到textbox 但是不能获得值 可是他获得了 为什么?
什么是后把值赋上去的
我那里理解错了 请高手指点
吃饭了 下午来回复
...全文
177 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
netsyt 2007-11-19
  • 打赏
  • 举报
回复
根据2楼的代码
我得理解是 第2步储存了ViewState["Text"]
第4步添加了 新的textbox 但是用的还是上面那个ViewState["Text"]
属性get中 将ViewState["Text"]返回了 所以获得了
这样理解有问题马?
bwangel 2007-11-19
  • 打赏
  • 举报
回复
在每个事件处理程序内部都加断点,再运行,再跟踪TextBox的值,就知道问题出在哪了
JGood 2007-11-19
  • 打赏
  • 举报
回复
在.net2.0的控件中,有所谓的"控件状态",与以前的视图状态不同,他是无法被禁用的
可能就是这个"控件状态"在发挥作用。
netsyt 2007-11-19
  • 打赏
  • 举报
回复
3楼的 不是空的
aspx代码是
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div runat="server" id="DIVID">
</div>
<div>
<asp:Button runat="server" ID="button" Text="OK" OnClick="OK_OnClick"/>
</div>
</form>
</body>
</html>
你可以试一下 输入值 在按钮事件设断点 可以找到输入的值
harryheart 2007-11-19
  • 打赏
  • 举报
回复
楼上的楼上的楼上...
harryheart 2007-11-19
  • 打赏
  • 举报
回复
楼上是高手
netsyt 2007-11-19
  • 打赏
  • 举报
回复
2楼的 我着的的值不是空的 是我输入的值
根据你的代码
是不是因为ViewState 再第2步已经把值存起来了
所以能读出来
谢谢两位了
NO28 2007-11-19
  • 打赏
  • 举报
回复
你的TextBox是在Page_Load时才添加的。
Load ViewState才是加载(还原)状态值。
故每次Page_Load都加载一次那么TextBox为空值。
seedling_lq 2007-11-19
  • 打赏
  • 举报
回复
不论是加载还是回刷都动态生成了一遍TextBox,而TextBox控件生成时如果没赋Text属性,默认是置为string.Empty的,所以你可以找到它的值,不过是空的而已;附上控件属性代码

public virtual string Text
{
get
{
string str = (string) this.ViewState["Text"];
if (str != null)
{
return str;
}
return string.Empty;
}
set
{
this.ViewState["Text"] = value;
}
}
shawn_yang 2007-11-19
  • 打赏
  • 举报
回复
在页面顶部设置

<%@ Page Trace="True" %>

你可以看到页面生命周期的详细信息
shoushii 2007-11-19
  • 打赏
  • 举报
回复
4. Page_Load();
-->OK_OnClick
-->GO on
----------------------------------------
PostBack-->Load ViewState-->OK_OnClick
seedling_lq 2007-11-19
  • 打赏
  • 举报
回复
不好意思,刚午睡去了才醒,LZ上面的理解没有错,是在页面回刷时ViewState里保存了你输入的值,而动态创建了TextBox之后又把这个值赋给了它;我上面是没考虑到你是指前台输入值后再回传的情况
netsyt 2007-11-19
  • 打赏
  • 举报
回复
看来没人回答了 结贴

62,046

社区成员

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

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

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

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