技术开发 频道

解析ASP.NET网页间传递数据的⑤种方式

  三、通过会话状态传递数据

  使用会话状态的好处是可以在与源页处于相同ASP.NET应用程序的所有网页间共享数据。缺点是会增加服务器的内存开销。

  下面的代码中,用户在源页的【用户名】文本框中输入自己的姓名,然后单击【提交数据】按钮。服务器代码会通过Page.Session属性将用户名存储到会话状态中,然后使用Response.Redirect()方法将页面强制重定向到另外一个页面(DestinationPage.aspx)。在这个目标页面中再次通过Page.Session属性来获取用户在源页中保存的用户名。

  源页的源代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SourcePage.aspx.cs" Inherits="SourcePage" %>

<!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>

 

  源页中用来保存用户名到会话状态并重定向到目标页的代码如下:

protected void SubmitButton_Click(object sender, EventArgs e)
{
    this.Session[
"UserName"] = this.UserNameTextBox.Text;
    this.Response.Redirect(
"DestinationPage.aspx");
}

 

  目标页中获取保存在会话状态中的用户名的代码如下:

protected void Page_Load(object sender, EventArgs e)
{
    
string UserName = this.Session["UserName"].ToString();
    this.Response.Write(UserName);
}

 

  四、通过源页的公共属性传递数据

  在示例代码中,我们在源页中提供了一个输入用户名的文本框,然后通过单击【提交到目标页】按钮将数据提交到目标页。

  源页的源代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SourcePage.aspx.cs" Inherits="SourcePage" %>

<!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的公共属性,此属性返回的是【用户名】文本框中输入的用户名。

public string UserName
{
    
get { return this.UserNameTextBox.Text; }
}

 

  这样我们就创建了一个包含公共属性的源页。接着创建目标页,并且为目标页添加@PreviousPageType指令,当然也可以使用@Reference指令。

<%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %>

 

  这样,ASP.NET就会自动将目标页的Page.PreviousPage属性转换为源页的类型,从而就可以直接访问UserName属性。注意观察下面的代码,我们并没有将Page.PreviousPage进行显示的类型转换。

if (this.PreviousPage != null)
{
    
string UserName = this.PreviousPage.UserName;
    this.Response.Write(UserName);
}

 

  需要特别强调的是不要忘记判断Page.PreviousPage属性是否为null,因为它确实有为null的可能性。如果在为null的情况下获取UserName这个源页的公共属性,那是会跳出异常的。  

0
相关文章