ASP.NET中页面间传值方法总结
在ASP.NET网络编程中经常需要处理上一个页面向下一个页面传递数量不等的各种数据。下面利用Microsoft Visual Studio 2008 C#介绍六种页面传值方式。1、通过用QueryString来传送相应的值;2、通过session变量来传送相应的值;3、通过Server.Transfer方法来实现;4、是利用Cookie传送页面间相应的值;5、 PostBackUrl()方法;6、利用类来传递页面的值。
一、使用Querystring
QueryString是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象类型的值。如果你想传递一个安全性不太重要或者是一个简单的数值时,用此方法最好不过了。下面的实例演示完成传值工作。
1、创建一个Web页面,命名为Default1.aspx
2、在新建的Default1中放置一个Button1,在放置两个TextBox1,TextBox2
3、Button按钮创建click事件代码如下:
protected void Button1_Click(object sender, EventArgs e){ string url; url="Default2.aspx?name="+TextBox1.Text + "&pwd="+TextBox2.Text; Response.Redirect(url);}4、新建另一个Web页面,命名为Default2.aspx5、在Default2中放置两个Label1,Label2
在Default2.aspx.cs的Page_Load中添加如下代码:
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text=Request.QueryString["name"].ToString();
Label2.Text=Request.QueryString["pwd"].ToString();
}
运行,即可看到传递后的结果了。
二、使用Session变量
使用Session变量传值是一种最常见的方式了,此中方式不仅可以把值传递到下一个页面,还可以交叉传递到多个页面,直至把Session变量的值Remove后,变量才会消失。
演示示例如下:
1、创建一个Web页面,命名为Default1.aspx
2、在新建的Default1中放置一个Button1,在放置两个TextBox1,TextBox2
3、为Button1按钮创建Click事件代码如下:
protected void Button1_Click(object sender, EventArgs e){ Session["Name"]=TextBox1.Text; Session["Pwd"]=TextBox2.Text; Response.Redirect("Default2.aspx");}4、新建另一个目标页面命名为Default2 .aspx5、在Default2页面中放置两个Label1,Label2标签。
在Default2.aspx.cs的Page_Load中添加如下代码:
protected void Page_Load(object sender, EventArgs e){ Label1.Text=Session["Name"].ToString(); Label2.Text=Session["Pwd"].ToString(); // Session.Remove("Name"); // Session.Remove("Pwd");}运行后即可看到传递后的结果了。三、使用Server.Transfer
演示示例如下:
1、创建一个Web页面,命名为Default1.aspx
2、在新建的Default1中放置一个Button1,在放置两个TextBox1,TextBox2
3、Button1按钮创建Click事件代码如下:
protected void Button1_Click(object sender, EventArgs e){ Server.Transfer("Default2.aspx");}4、在Default1.aspx.cs中创建两属性 Name, Pwd来存储TextBox1,TextBox2控件的值,代码如下:public partial class Default1 : System.Web.UI.Page{ public String Name { get { return this.TextBox1.Text; } } public string Pwd { get { return this.TextBox2.Text; } } protected void Page_Load(object sender, EventArgs e) { } protected void Button2_Click(object sender, EventArgs e) { Server.Transfer("Default2.aspx"); }}5、新建另一个目标页面命名为Default2.aspx6、在Default2中放置两个Label1,Label2 标签控件。
在Default2.aspx.cs的Page_Load中添加如下代码:
protected void Page_Load(object sender, EventArgs e){ if (!IsPostBack) { Default1 myver; myver = (Default1)Context.Handler; this.Label1.Text=myver.Name; this.Label2.Text = myver.Pwd; }} 四、 使用Cookie对象变量
这个也是大家常使用的方法,与Session相比,Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。
1、在Default1.aspx创建一个文本框TextBox1和一个按钮控件Button1。
2、在Default1.aspx.cs中添加下如代码
protected void Button1_Click(object sender, EventArgs e) { HttpCookie cookie_name = new HttpCookie("myname"); cookie_name.Value = this.TextBox1.Text; Response.AppendCookie(cookie_name); Server.Transfer("Default2.aspx");}3、Default2.aspx.cs中代码如下:
protected void Page_Load(object sender, EventArgs e){this.Label1.Text = Request.Cookies["myname"].Value.ToString();} 五、 PostBackUrl()方法
1、 在页面default.1.aspx中的代码如下:
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" PostBackUrl="~/Default3.aspx"
Text="def3" />
</div>
</form>
</body>
2、在Default2.aspx.cs中的代码:
protected void Page_Load(object sender, EventArgs e){ if (PreviousPage != null) { TextBox textbox = (TextBox)this.PreviousPage.FindControl("TextBox1"); Response.Write(textbox.Text); } } 注意,PreviousPage是Page类的一个新属性,PreviousPage返回一个Page对象,这个对象中的控件可能使用FindControl()方法来方问。
六、利用一个类来传递页面的值
在Asp.net中创建一类,并取一个名字,如UserInfo,系统会自动将该类放在App_Code文件夹中。
其中类的代码如下:
public class UserInfo{ public UserInfo() { // //TODO: 在此处添加构造函数逻辑 // } private TextBox textName; public TextBox TextName { get { return textName; } set { textName = value; } } private TextBox textPwd; public TextBox TextPwd { get { return textPwd; } set { textPwd = value; } } private TextBox textEmail; public TextBox TextEmail { get { return textEmail; } set { textEmail = value; } }}2、在页面Default1.aspx中创建三个文本框和一个按钮,TextBox1,TextBox2,TextBox3三个文本框的ID分别为:TextName,TextPwd ,TextEmail代码见下面:<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextName" runat="server"></asp:TextBox>
<asp:TextBox ID="TextPwd" runat="server"></asp:TextBox>
<asp:TextBox ID="TextEmail" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
<br />
</div>
</form>
</body>
3、在Default1.aspx.cs中的代码如下,参见上面和下面控件ID蓝色名称:
public UserInfo myyInfo { get { UserInfo info = new UserInfo(); info.TextName = TextName; info.TextPwd = TextPwd; info.TextEmail = TextEmail; return info; } } protected void Button1_Click(object sender, EventArgs e) { this.Button1.PostBackUrl = "~/Default2.aspx"; } 4、下面列出目标页面Default2.aspx上关键代码,
在Default2.aspx文件的Page指令后面添加PreviousPageType指令,如下所示:
<%@ Page Language="C#" CodeFile="Default5.aspx.cs" Inherits="Default5" %>
<%@ PreviousPageType VirtualPath="~/Default1.aspx" %>
5、在目标页面上创建三个标签控件Label1,Label2,Label3,分别用于显示上一个页面传过来的用户姓名,密码和电子邮件地址。
6、在Defautl2.aspx.cs中的代码如下:
protected void Page_Load(object sender, EventArgs e){ UserInfo myInfo = PreviousPage.myyInfo; Label1.Text = myInfo.TextName.Text; Label2.Text = myInfo.TextPwd.Text; Label3.Text = myInfo.TextEmail.Text;}