清华电脑学堂:ASP.NET 4.5网站开发与应用实践教程
上QQ阅读APP看书,第一时间看更新

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事件:当服务器控件从内存中卸载时发生。