在使用VISUAL STUDIO.NET 2005开发中,用C#作为脚本语言,需要用到一个很为重要的方法,也就是大家最为熟悉的对象。C#和C++一样,是一种面向对象的语言,于是,我们需要谈谈面向对象。
在Web应用程序开发中,我们经常用到一些ASP.NET的内部对象,用于维护当前应用程序,每一个会话,当前的HTTP请求,请求Web窗体页面等等。ASP.NET的内置对象有Page,Response,Request,Server,Application,Session,Cookies等,他们都是封装在.NET Framework类中。在ASP.NET页面初始化的时候,能够自动的加载,所有无需大家的建立,可以直接使用。
ASP.NET内置对象之一是Page,首先大体概括一下Page的属性和事件。它有IsPostBack,IsValid,RegisterClientScriptBlock等常用属性,有Init,Load,Unload等常用的事件。
首先说说Page_Init事件,它的标准实行是protected void Page_Init(object sender, EventArgs e),用于对页面的初始化。在Web服务器端首先需要加载一个Page_Init。它和Page_Load不同,前者是初始化,后者是在初始化的基础上进行加载。比如当用户在浏览器页面触发了某个事件以后,客户端将窗口数据传回到服务器,服务器需要重新加载,然后再将数据返回到客户端,于是客户端也再次加载,但是这一次加载的时候就不会再加载Page_Init对象了,而是直接运行Page_Load事件。
Page_Init和Page_Load的区别可以通过一下代码和例子说明:
这是Page_Init 的代码
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Page_Init(object sender, EventArgs e)
{
list1.Items.Add("青白江");
list1.Items.Add("云南");
}
protected void Button1_Click(object sender, EventArgs e)
{
list1.Items.Add(TextBox1.Text);
}
}
下面是Page_Load的代码
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
list1.Items.Add("青白江");
list1.Items.Add("云南");
}
protected void Button1_Click(object sender, EventArgs e)
{
list1.Items.Add(TextBox1.Text);
}
}
他们的不同之处在于: Page_Init事件中,第一次客户端请求的时候,得到一个地址,然后点击增加地址后,也就是向服务器端返回一个数据,再得到一个数据,此时应该是调用Page_Load了,得到是正常的结果。但是如果没有Page_Init事件,那么向服务端返回数据后再得到数据,也就是加载了两次Page_Load事件,得到的结果是重复的。
Page_Load事件是最常用的事件,每次都需要加载的,可以在事件里面实现很多对象的使用,属性的使用,它非常的重要。
后是Page_Unload事件,因为这个事件我使用的很少,所有没有可以总结的和经验之谈。那么就说说几个属性吧。
IsPostBack按照一本参考书的说法是用来获取一个布尔值,如果是TRUE,表示当前页为了响应客户端回发(例如单击按钮)而加载的,否则表示当前页面是首次加载和访问。我还是一个例子来实现比较容易说明白。
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack == false)
{
Label1.Text = "这是页面首次加载和访问得到的结果!";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (IsPostBack == true)
Label2.Text = "这是触发了BUTTON按钮后的结果!";
}
}
然后将false true互相换一下位子 更能够说明问题。
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack == true)
{
Label1.Text = "这是页面首次加载和访问得到的结果!";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (IsPostBack == false)
Label2.Text = "这是触发了BUTTON按钮后的结果!";
}
}
于是就没有了两行文字说明了。当点击BUTTON按钮,再次加载的时候,又出现下一个结果:
说明已经不是首次加载了,然后可以进行一些操作。
还有就是IsValid属性,用书上的话就是获取一个布尔值,用来只是页面验证是否成功,如果成功,就为TRUE,一般在含有验证服务器控件中使用,只有当所有的服务器控件都验证成功后,它的值才为TRUE。注意这个属性最好与验证服务器控件一起使用,也就是说大多数用在登陆框或者验证中…
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (Page.IsValid == true)
{
Label1.Text = "提交正确,谢谢你的参与!";
}
else
{
Label1.Text = "对不起,请重新提交!";
}
}
}
当提交正确后成:
还有一个是RegisterClientScriptBlock属性,用来在页面中发出客户端脚本块。
详细的说明和解释请大家参考MSDN文档。
最后想说的一点是这个Page对象虽然简单,但是要深刻理解还是不容易的,要弄清楚服务端和客户端的功能,传送方式等。这关系到一个学习方法的问题,也就是说该怎么学习,其实可以通过上面的代码和例子看出来,如果你搞不清某些定义,最好的方法是采用对比方法,用相反的一面去理解,这样可以帮助你学习!