【IT168 技术文档】对于每一个.NET程序员,对于ASP.NET页面生命周期都有一定的了解和把握。关于一些细节方面请参考http://blog.sina.com.cn/s/blog_5f7aa2970100d5h4.html,内容比较详尽,本文将不再概述。本文主要是从继承以及视图状态,事件,委托,容器控件以及子控件这些方面来把握和控制整体的页面生命周期。
先看下下面4个相关页面的代码(为降低复杂度,很多代码被删减与精简,仅提供最基本的操作代码)。仅仅几个文件,先看下整体文件的布局,有一个整体的把握。
(一)父类的相关事件以及处理
public class UserParentPage:System.Web.UI.Page
{
/// <summary>
/// 对回传数据的处理,以及其他内容的设置、获取
/// </summary>
/// <param name="e"></param>
protected override void OnInit(EventArgs e)
{
Core.Trace.TraceInfo("UserParentPage OnInit");
base.OnInit(e);
//编写相应的代码防止SQL注入
//System.Web.HttpContext.Current.Request.QueryString/Form
//根据上下文对象来检测,以及做出相应的处理
//以及其他一些内容的设置、控制等等
}
protected override void OnLoad(EventArgs e)
{
Core.Trace.TraceInfo("UserParentPage OnLoad");
base.OnLoad(e);
//编写相应的代码对整体页面的控制
}
}
{
/// <summary>
/// 对回传数据的处理,以及其他内容的设置、获取
/// </summary>
/// <param name="e"></param>
protected override void OnInit(EventArgs e)
{
Core.Trace.TraceInfo("UserParentPage OnInit");
base.OnInit(e);
//编写相应的代码防止SQL注入
//System.Web.HttpContext.Current.Request.QueryString/Form
//根据上下文对象来检测,以及做出相应的处理
//以及其他一些内容的设置、控制等等
}
protected override void OnLoad(EventArgs e)
{
Core.Trace.TraceInfo("UserParentPage OnLoad");
base.OnLoad(e);
//编写相应的代码对整体页面的控制
}
}
(二)用户控件(子控件)的相关内容
public partial class UserEventControl : System.Web.UI.UserControl
{
public delegate void ChangedHandler();
public event ChangedHandler Changed;
private void Page_Load(object sender, System.EventArgs e)
{
Core.Trace.TraceInfo("UserEventControl OnLoad");
if (!Page.IsPostBack)
{
Core.Trace.TraceInfo("UserEventControl OnLoad !Page.IsPostBack==true");
SetContent();
}
}
private void SetContent()
{
int len =12,num = 2,perRowMaxCount=8;
System.Text.StringBuilder table = new System.Text.StringBuilder();
for (int i = 0; i <= num; i++)
{
table.Append(@"<table bordercolor='black' width='100%'><tr align='left'>");
for (int j = 0; j < perRowMaxCount; j++)
{
int p = i * perRowMaxCount + j;
if (p < len)
{
string paramValue ="param"+p.ToString();
string showValue ="show"+p.ToString();
table.Append(string.Format(@"<td width='12.5%'><a href='javascript:__doPostBack(""{2}"",""{0}"")' CommandName=""{0}"" class='line'><font>{1}</font></a></td>", paramValue,showValue, lbtnShow.ClientID.Replace("_lbtnShow", "$lbtnShow")));
}
else
{
table.Append(string.Format(@"<td width='12.5%'></td>"));
}
}
table.Append(@"</tr></table>");
}
lblShow.Text = table.ToString();
}
public string CurrentID
{
set
{
ViewState["CurrentID"] = value;
}
get
{
return (string)ViewState["CurrentID"];
}
}
protected override void OnInit(EventArgs e)
{
Core.Trace.TraceInfo("UserEventControl OnInit");
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.lbtnShow.Click += new System.EventHandler(this.lbtnShow_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
/// <summary>
/// 单击时将触发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lbtnShow_Click(object sender, System.EventArgs e)
{
Core.Trace.TraceInfo("UserEventControl lbtnShow_Click");
CurrentID = Request.Form["__EVENTARGUMENT"];//获取回传值
SetContent();//设置内容----因为有些内容被修改过,如样式什么的,本例忽略
Changed();//触发事件
}
}
{
public delegate void ChangedHandler();
public event ChangedHandler Changed;
private void Page_Load(object sender, System.EventArgs e)
{
Core.Trace.TraceInfo("UserEventControl OnLoad");
if (!Page.IsPostBack)
{
Core.Trace.TraceInfo("UserEventControl OnLoad !Page.IsPostBack==true");
SetContent();
}
}
private void SetContent()
{
int len =12,num = 2,perRowMaxCount=8;
System.Text.StringBuilder table = new System.Text.StringBuilder();
for (int i = 0; i <= num; i++)
{
table.Append(@"<table bordercolor='black' width='100%'><tr align='left'>");
for (int j = 0; j < perRowMaxCount; j++)
{
int p = i * perRowMaxCount + j;
if (p < len)
{
string paramValue ="param"+p.ToString();
string showValue ="show"+p.ToString();
table.Append(string.Format(@"<td width='12.5%'><a href='javascript:__doPostBack(""{2}"",""{0}"")' CommandName=""{0}"" class='line'><font>{1}</font></a></td>", paramValue,showValue, lbtnShow.ClientID.Replace("_lbtnShow", "$lbtnShow")));
}
else
{
table.Append(string.Format(@"<td width='12.5%'></td>"));
}
}
table.Append(@"</tr></table>");
}
lblShow.Text = table.ToString();
}
public string CurrentID
{
set
{
ViewState["CurrentID"] = value;
}
get
{
return (string)ViewState["CurrentID"];
}
}
protected override void OnInit(EventArgs e)
{
Core.Trace.TraceInfo("UserEventControl OnInit");
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.lbtnShow.Click += new System.EventHandler(this.lbtnShow_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
/// <summary>
/// 单击时将触发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lbtnShow_Click(object sender, System.EventArgs e)
{
Core.Trace.TraceInfo("UserEventControl lbtnShow_Click");
CurrentID = Request.Form["__EVENTARGUMENT"];//获取回传值
SetContent();//设置内容----因为有些内容被修改过,如样式什么的,本例忽略
Changed();//触发事件
}
}