三、通过会话状态传递数据
使用会话状态的好处是可以在与源页处于相同ASP.NET应用程序的所有网页间共享数据。缺点是会增加服务器的内存开销。
下面的代码中,用户在源页的【用户名】文本框中输入自己的姓名,然后单击【提交数据】按钮。服务器代码会通过Page.Session属性将用户名存储到会话状态中,然后使用Response.Redirect()方法将页面强制重定向到另外一个页面(DestinationPage.aspx)。在这个目标页面中再次通过Page.Session属性来获取用户在源页中保存的用户名。
源页的源代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>源页:通过会话状态传递数据!</title>
</head>
<body>
<form id="form1" runat="server">
<div>
用户名:
<asp:TextBox ID="UserNameTextBox" runat="server"></asp:TextBox>
<asp:Button ID="SubmitButton" runat="server" Text="提交数据"
onclick="SubmitButton_Click" />
</div>
</form>
</body>
</html>
源页中用来保存用户名到会话状态并重定向到目标页的代码如下:
{
this.Session["UserName"] = this.UserNameTextBox.Text;
this.Response.Redirect("DestinationPage.aspx");
}
目标页中获取保存在会话状态中的用户名的代码如下:
{
string UserName = this.Session["UserName"].ToString();
this.Response.Write(UserName);
}
四、通过源页的公共属性传递数据
在示例代码中,我们在源页中提供了一个输入用户名的文本框,然后通过单击【提交到目标页】按钮将数据提交到目标页。
源页的源代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>源页:通过公共属性传递数据!</title>
</head>
<body>
<form id="form1" runat="server">
<div>
用户名:<asp:TextBox ID="UserNameTextBox" runat="server"></asp:TextBox>
<br />
<asp:Button ID="SubmitButton" runat="server" Text="提交到目标页"
PostBackUrl="~/DestinationPage.aspx" />
</div>
</form>
</body>
</html>
并且为源页定义了一个名为UserName的公共属性,此属性返回的是【用户名】文本框中输入的用户名。
{
get { return this.UserNameTextBox.Text; }
}
这样我们就创建了一个包含公共属性的源页。接着创建目标页,并且为目标页添加@PreviousPageType指令,当然也可以使用@Reference指令。
这样,ASP.NET就会自动将目标页的Page.PreviousPage属性转换为源页的类型,从而就可以直接访问UserName属性。注意观察下面的代码,我们并没有将Page.PreviousPage进行显示的类型转换。
{
string UserName = this.PreviousPage.UserName;
this.Response.Write(UserName);
}
需要特别强调的是不要忘记判断Page.PreviousPage属性是否为null,因为它确实有为null的可能性。如果在为null的情况下获取UserName这个源页的公共属性,那是会跳出异常的。