Asp.net中Page加载PostData过程:
1、触发页面init事件。
2、判断是否IsPostBack,如果True,就走第3步,否则跳过第3步
3、解析PostData数据,并根据页面的设计内容(.aspx),加载PostData(一次加载)到各个控件。
4、触发页面的Load事件(在这个事件中有一个机会让我们来准备Load动态创建控件的PostData)。
5、再次判断是否IsPostBack,如果True,就走第6步,否则跳过第6步
6、解析PostData数据,判断是否还有剩余的PostData还没有被加载?如果是,进行第二次加载。否则退出
..........
说明:PostData的数据的加载规则:根据PostData(其实是一个Collection对象)中的控件Name与当前Page的Control中的控件对象的Name是否匹配,如果匹配就把Value赋给对应控件对象的某个属性。
也许你们已经发现剩余的PostData是不是就是动态创建的控件呈现到客户端,又从客户端Post过来的数据呢? 答案是完全正确的。剩余的PostData确实是从动态创建的控件对应的Post数据。流程的第6步表示:Asp.net在Page_Load事件后,还会再一次加载剩余的PostData,这就是在很多文章中所提及的二次加载
比如是在某个Button的Click事件中创建了CheckBox,以成员变量CheckBox1引用,控件Name为CheckBox1。然后呈现给客户端,客户端选中该CheckBox1,并又提交。由于是动态创建的控件原因,在服务器处理这次客户端的提交时,在Page_Load是无法获取该CheckBox1的是否被选中的状态的。应该这样处理:在Page_Load中再一次创建该CheckbBox1,以成员变量CheckBox1引用,控件Name为CheckBox1,该对象的Name必须和前一次所动态创建控件的Name必须相同),并返回,然后在其他控件事件中获取该checkbox1变量的check属性值就是客户端的用户操作的实际值。
所以,在Page的Load事件的处理方式是实现“获取动态创建控件的PostData”的关键点!为什么这么说呢?因为只有在这个Load事件中,我们才有机会把前一次创建的动态控件再创建一次,在让Asp.net的Page来做"第5步和第6步",达到把剩余的PostData加载到刚刚所创建的控件对象去(这就是Postdata的二次加载)....
我不知道解释是否详细?如果有不明白的地方非常抱歉,大家可以自己去MSDN上查找....我就不替大家找了...但是我这里给出一个实例代码,用于解释“如何获取动态创建控件的PostData数据”,仔细研究一下,我想也差不多够了,至于代码中有不明白的地方,可随时提问!希望对大家有帮助! :-)
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace AspTestForFaq
{
/// <summary>
/// Summary description for WebForm6.
/// </summary>
public class WebForm6 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button CreateCtrl;
protected System.Web.UI.WebControls.Button Submit;
protected System.Web.UI.WebControls.Panel Panel1;

private CheckBox m_CheckBox = null;
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
if (IsPostBack && (null != ViewState["Created"]))
{
m_CheckBox = new CheckBox();
Panel1.Controls.Add(m_CheckBox);
}
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.CreateCtrl.Click += new System.EventHandler(this.CreateCtrl_Click);
this.Submit.Click += new System.EventHandler(this.Submit_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void CreateCtrl_Click(object sender, System.EventArgs e)
{
if (ViewState["Created"] ==null)
{
m_CheckBox = new CheckBox();
m_CheckBox.Text = "Click me";
Panel1.Controls.Add(m_CheckBox);
ViewState["Created"] = "1";
CreateCtrl.Visible = false;
}
}

private void Submit_Click(object sender, System.EventArgs e)
{
if (m_CheckBox != null)
{
if (m_CheckBox.Checked)
m_CheckBox.Text = "Thank you for your check";
else
m_CheckBox.Text = "please checked me!!!";
}
}
}
}
1、触发页面init事件。
2、判断是否IsPostBack,如果True,就走第3步,否则跳过第3步
3、解析PostData数据,并根据页面的设计内容(.aspx),加载PostData(一次加载)到各个控件。
4、触发页面的Load事件(在这个事件中有一个机会让我们来准备Load动态创建控件的PostData)。
5、再次判断是否IsPostBack,如果True,就走第6步,否则跳过第6步
6、解析PostData数据,判断是否还有剩余的PostData还没有被加载?如果是,进行第二次加载。否则退出
..........
说明:PostData的数据的加载规则:根据PostData(其实是一个Collection对象)中的控件Name与当前Page的Control中的控件对象的Name是否匹配,如果匹配就把Value赋给对应控件对象的某个属性。
也许你们已经发现剩余的PostData是不是就是动态创建的控件呈现到客户端,又从客户端Post过来的数据呢? 答案是完全正确的。剩余的PostData确实是从动态创建的控件对应的Post数据。流程的第6步表示:Asp.net在Page_Load事件后,还会再一次加载剩余的PostData,这就是在很多文章中所提及的二次加载
比如是在某个Button的Click事件中创建了CheckBox,以成员变量CheckBox1引用,控件Name为CheckBox1。然后呈现给客户端,客户端选中该CheckBox1,并又提交。由于是动态创建的控件原因,在服务器处理这次客户端的提交时,在Page_Load是无法获取该CheckBox1的是否被选中的状态的。应该这样处理:在Page_Load中再一次创建该CheckbBox1,以成员变量CheckBox1引用,控件Name为CheckBox1,该对象的Name必须和前一次所动态创建控件的Name必须相同),并返回,然后在其他控件事件中获取该checkbox1变量的check属性值就是客户端的用户操作的实际值。
所以,在Page的Load事件的处理方式是实现“获取动态创建控件的PostData”的关键点!为什么这么说呢?因为只有在这个Load事件中,我们才有机会把前一次创建的动态控件再创建一次,在让Asp.net的Page来做"第5步和第6步",达到把剩余的PostData加载到刚刚所创建的控件对象去(这就是Postdata的二次加载)....
我不知道解释是否详细?如果有不明白的地方非常抱歉,大家可以自己去MSDN上查找....我就不替大家找了...但是我这里给出一个实例代码,用于解释“如何获取动态创建控件的PostData数据”,仔细研究一下,我想也差不多够了,至于代码中有不明白的地方,可随时提问!希望对大家有帮助! :-)


















































































分类:
ASP.Net
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix