在ASP.NET中有几种基于页面间的传值方法:
1,
常见的有QueryString.这种方法最简单不过了,但缺点就是它把要传送的值显示在地址栏中,如果对于在安全性的信息来说这并不是一种好的解决方案。还有一个缺点就是它不能传对象。这种方法适合于传送一个简单的值及安全性不大重要的信息。
例:
有两个页面:WebForm1.aspx,WebForm2.aspx。
在WebForm1.aspx.cs的某些事件中放置如下代码:
string url="WebForm2.aspx?name="+this.txtname.Text;
Response.Redirect(url);
接着关键时刻出现了:在WebForm2.aspx.cs中某些事件中放置如下代码:
lblname.Text=Request.QueryString["name"];
OK! 整个传值过程完成!
2,
利用Session变量来传值,这种也比较常用。利用Session比较灵活,可以在多个页面间进行传值。当调用其remove后,Session即失效。
例:
WebForm1.aspx.cs中写入如下代码:
Session["name"]=txtname.Text;
Response.Redirect("WebForm2.aspx");
下面在WebForm1.aspx.cs中取出Session的值:
lblname.Text=Session["name"].ToString(); //因为取出来的是一个对象,所以必须转换类型
Session.Remove("name");? //使Session失效
3,
第三种方式是利用Request对象来取值,(注:这里使用的是html控件)这种比较简洁。
例:
在WebForm1.aspx中:
Name:
?
在WebForm2.aspx.cs中某个事件写入:Response.Write(Request.Form["txtname"]);
当点击submit按钮后,即通过Request.Form[”txtname”]取出了值,
4,
利用Server对象的Transfer()方法来传值,它接收一个页面对象。
例:
第四种方法是利用Server对象的Transfer()方法来传值,它接收一个页面对象。
下面用代码来讲解一下这种实现方式:
在Server_Transfer_Demo.aspx 的某个事件中写入如下代码:Server.Transfer("Server_Transfer_Result.aspx"); //传递页面对象
接着就可以在Server_Transfer_Result.aspx.cs中获取WebForm1的页面对象。
先在Server_Transfer_Result.aspx.aspx 加入<%@ PreviousPageType VirtualPath="~/Server_Transfer_Demo.aspx" %>
//方式一
//注意要加上<%@ PreviousPageType VirtualPath="~/Server_Transfer_Demo.aspx" %>
if (Context.Handler is Server_Transfer_Demo)
{
Server_Transfer_Demo demo = (Server_Transfer_Demo)Context.Handler;
Response.Write("方式一Context.Handler:"+((TextBox)demo.FindControl("txtName")).Text);
}
//方法二
if (Page.PreviousPage != null)
{
if (!PreviousPage.IsCrossPagePostBack)
{
Response.Write("方式二PreviousPage.IsCrossPagePostBack:" + ((TextBox)this.PreviousPage.FindControl("txtName")).Text);
}
}
//方法三,要求在上一次页面写上 public string TxtName{get { return txtName.Text; }}属性透露,
//注意要加上<%@ PreviousPageType VirtualPath="~/Server_Transfer_Demo.aspx" %>
Response.Write("方法三:"+PreviousPage.TxtName); (注:以上几种方法,除了Request.Form()这种传值方法使用的是HTML控件外,其它几种都是使用WEB控件)
5, cookie
例:
在Cookie_Demo.aspx 中txtName,butSubmit按钮
在butSubmit事件中加入
HttpCookie cookie = new HttpCookie("cookie_Name",this.txtName.Text);
cookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(cookie);
Server.Transfer("Cookie_Result.aspx");
在Cookie_Result。Aspx的事件中
加入
string name = Request.Cookies["cookie_Name"].Value;
Response.Write(name);