4.1 Page对象
严格来说,Page对象是一个页面级别的对象,该对象是由System.Web.UI命名空间中的Page类来实现的,作为公有属性被声明在System.Web.UI.Control类中,它被System.Web.UI.TemplateControl类继承。
4.1.1 Page对象的属性
每一个ASP.NET页面都会对应一个页面类,Page对象就是页面类的实例。因为,Page对象是由System.Web.UI命令空间中的Page类来实现,因此,Page类与扩展名为“.aspx”的文件相关联,这些文件在运行时被编译为Page对象,并缓存在服务器内存中。
Page对象提供多个属性,通常这些属性可以获取不同的内容,常用属性如表4-1所示。
表4-1 Page对象的常用属性
在表4-1中列出了Page对象的多个属性,下面简单介绍IsPostBack属性和IsValid属性。
1.IsPostBack属性
IsPostBack属性用来获取一个布尔值,如果返回值为true,则表示当前页是为响应客户端回发;如果返回值为false,则表示当前页是首次加载。
【范例1】
在Web窗体页中分别添加一个用户名输入框、一个密码框和一个提交按钮,代码如下。
Name:<asp:TextBox ID="txtName" runat="server"></asp:TextBox><br /><br /> Pass:<asp:TextBox ID="txtPass" TextMode="Password" runat="server"> </asp:TextBox><br /><br /> <asp:Button ID="Button1" runat="server" Text="Button" />
在Web窗体页后台Load事件中添加代码,通过Page.IsPostBack判断页面是否为首次加载,如果是则将用户名输入框的值显示为admin,否则显示“回发”,代码如下。
protected void Page_Load(object sender, EventArgs e) { if (! Page.IsPostBack) { //页面首次加载 txtName.Text = "admin"; } else { //页面回发 txtName.Text = "回发"; } }
运行窗体页面查看效果,如图4-1所示为首次加载时的效果。直接单击Button按钮进行测试,如图4-2所示。
图4-1 页面首次加载
图4-2 页面回发加载
2.IsValid属性
IsValid属性用来获取一个布尔值,该值指示页验证是否成功。如果页验证成功,则为true;否则为false。一般在包含验证服务器控件的页面中使用,只有在所有验证服务器控件都验证成功时,IsValid属性的值才为true。
【范例2】
在范例1的基础上添加代码,实现步骤如下。
(1)为用户输入框和密码框添加RequiredFieldValidator验证控件,必须保证用户输入登录名和密码,代码如下。
Name:<asp:TextBox ID="txtName" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="rfvName" runat="server" ControlToValidate= "txtName" ErrorMessage="必须填写"></asp:RequiredFieldValidator><br /><br /> Pass:<asp:TextBox ID="txtPass" TextMode="Password" runat="server"> </asp:TextBox> <asp:RequiredFieldValidator ID="rfvPass" runat="server" ControlToValidate= "txtPass" ErrorMessage="必须填写"></asp:RequiredFieldValidator><br /> <br />
(2)为窗体中的Button控件添加Click事件。页面代码如下。
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_ Click" />
(3)在Button控件之后添加一个用于显示信息的Label控件。窗体代码如下。
<asp:Label ID="lblResult" runat="server" ></asp:Label>
(4)在窗体页面后台添加Button控件的Click事件代码,通过Page.IsValid属性判断是否通过验证。内容如下。
protected void Button1_Click(object sender, EventArgs e) { if (Page.IsValid) { //如果输入的信息通过验证 lblResult.Text = "通过验证"; } }
(5)运行窗体页面查看效果,直接单击图中的Button按钮测试,如图4-3所示。在页面中输入用户名和密码后再次单击Button按钮,如图4-4所示。
图4-3 没有通过验证
图4-4 已经通过验证
4.1.2 Page对象的方法
Page对象最常用的就是属性,但是它也提供了一系列的方法和事件,最常用的方法有以下两个。
(1)DataBind()方法:将数据源绑定到被调用的服务器控件及其所有子控件。
(2)RegisterClientScriptBlock()方法:向页面发出客户端脚本块。
使用Page.RegisterClientScriptBlock()方法可以在页面中输出脚本,但是这种方式已经过时。实际上,Page对象支持ClientScript属性,该属性返回ClientScriptManager对象。调用ClientScriptManager对象提供的方法也可以输出脚本,如表4-2所示。
表4-2 ClientScriptManager对象的常用方法
RegisterClientScriptBlock()方法输出脚本信息时,可以将JavaScript函数放在页面的顶部。也就是说,该脚本用于在浏览器中启动页面。两个形式如下。
void ClientScriptManager.RegisterClientBlock(Type type, string key, string script) void ClientScriptManager.RegisterClientBlock(Type type, string key, string script, bool addScriptTags)
其中,type表示要注册的客户端脚本的类型;key表示要注册的客户端脚本的键;script表示要注册的客户端脚本文本;addScriptTags表示是否添加脚本标记的布尔值。
【范例3】
更改范例2的代码,重新为Button控件的Click事件添加代码。在该事件代码中判断用户输入的用户名和密码是否都为admin,如果是则弹出“恭喜您,输入的用户名和密码正确!”对话框提示,否则弹出“很抱歉,用户名或者密码错误!”对话框提示。代码如下。
if (txtName.Text == "admin" && txtPass.Text == "admin") { Page.ClientScript.RegisterClientScriptBlock(GetType(), "", "<script> alert(’恭喜您,输入的用户名和密码正确!')</script>"); } else { Page.ClientScript.RegisterClientScriptBlock(GetType(), "", "<script> alert(’很抱歉,用户名或者密码错误!')</script>"); }
运行窗体页面输入用户名和密码后单击按钮测试,如图4-5所示。
图4-5 RegisterClientScriptBlock()方法的使用
提示
除了RegisterClientBlock()方法外,RegisterStartupScript()方法也可以输出脚本。这两个方法的区别不大,最大的区别就是RegisterStartupScript()方法把脚本放在ASP.NET页面的底部,而不是顶部。实际上,RegisterStartupScript()方法与RegisterClientBlock()方法具有相同的构造函数,开发者在查找、调用页面控件时可用该方法。
4.1.3 Page对象的事件
Page对象包含一系列的事件,常用的三个事件说明如下。
(1)Init事件:当服务器控件初始化时发生。
(2)Load事件:当服务器控件加载到Page对象中时发生。
(3)Unload事件:当服务器控件从内存中卸载时发生。