ASP.NET跨页传值方法汇总

来源:互联网 发布:淘宝网络客服招聘 编辑:程序博客网 时间:2024/05/01 22:17

http://www.cnblogs.com/lgzslf/archive/2009/05/21/1486362.html


方法一:问号传值(Response.Redirect方法)

1:源页:在按钮的点击事件程序中写入Response.Redirect方法,在其中使用问号传值。如:

Response.Redirect("Default2.aspx?id="+txtId.Text.Trim()+"&name="+Server.UrlEncode(txtName.Text.Trim()));

HTML代码中可以这样写:

<a href="Default2.aspx?id=1&name=aa">跳转</a>  //多个值用&相连,注意&两边不要加空格

2:目标页:在Request.QueryString集合中查找。

如:Response.Write("ID is "+Request.QueryString["id"].ToString());

或者:<% =Request.QueryString["id"] %>

特点:简单方便,可以跨WEB服务器,但效率低。当Web服务器接到一个重定向请求后,它会将一个响应头送给客户端,这将导致客户端发送一个新的请求到服务器。按句话说,一个重定向请求实际上是两个请求响应如果想要传递一个安全性不太重要或一个结构简单的数值时,用此法最容易

方法二:使用Server.Transfer

1:源页:在按钮的点击事件程序中写入:  Server.Transfer("Default2.aspx", true);   注意一定要加上第二个参数true,否则值传不过去。

2: 目标页:在Request.Form集合中查找发送方页面上的文本框架ID,如

Response.Write("传过来的名字是:"+Request.Form["txtName"].ToString());

特点:跳转的范围仅限于同一个Web服务器的不同网页,且在地址栏中显示的仍是原网页的地址,不便于调试,但属于服务器端的直接重定向,效率比Response.Redirect方法高。

Response.Redirect和Server.Transfer的比较
由于Response.Redirect方法要进行两次请求响应操作,因此,我们应该在对性能要求高的网站尽量避免使用这种方法。然而,只从技术上说,使用redirect方式确实可以从一个网页跳到另一个网页。相比之下,Server.Transfer会更有效率,但是。从本质上说,我们可以使用 Server.Transfer来消除不必要的请求响应操作。如果我们需要重定位到不同服务器的网页,就需要使用Response.Redirect方法。

方法三:使用PostBackUrl

从ASP.NET2.0开始,可以使用PostBackUrl实现跨页传值。

1:源页:在实现了IbuttonControl接口的控件(如按钮、LinkButton等)上,添加属性PostBackUrl="~/Default2.aspx"

2: 目标页:使用PreviousPage属性,且最好判断一下是否是从发送页以PostBackUrl方式跳转过来的,代码如下所示:

        if(PreviousPage!=null && PreviousPage.IsCrossPagePostBack &&

          PreviousPage.IsValid)

        {

            TextBox txt = (TextBox)PreviousPage.FindControl("txtName");

            Response.Write(txt.Text);

        }

若要获取源页的公共成员(例如某个属性的值),必须先获取对源页的强类型引用。例如:

源页中有如下属性:public String CurrentCity{    get    { return textCity.Text;   }}

目标页:<%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %>

Label1.Text = PreviousPage.CurrentCity;

特点:底层通过javascript函数和保存视图状态的__POSTBACK的隐藏字段实现。具体效率应该较高。

方法四:使用Application对象变量

1:源页: 保存信息,建议同时使用Lock和UnLock方法。

Application.Lock();

Application["PageRequestCount"] = 

    ((int)Application["PageRequestCount"])+1;

Application.UnLock();

2:目标页:int cnt=int.Parse(Application["PageRequestCount"].ToString());

特点:全局变量,所有用户可见,常用在聊天室程序中。

方法五:使用Session

1:源页:保存信息

Session["Name"]= txtName.Text;


2:目标页 string name=Session["Name"].ToString();

Session对象变量若存储过多的数据则会消耗大量的服务器资源,在使用时尤其要注意控制数量。

方法六:使用Cookie

1:源页: HttpCookie Name= new HttpCookie("Name");
      Name.Value= txtName.Text;

cookie.Expires = DateTime.Now.AddMinutes(30);

HttpContext.Current.Response.AppendCookie(Name);

2:目标页:string info =Request.Cookies["cookiename"].Value;

或者:

HttpCookie acookie=Request.Cookie("cookiename");//通过Request获取acookie对象
 string aa=acookie.Value.ToString();//在通过Value属性获取值基本上和Response用法相似。在获取cookie之前,应确保该cookie确实存在。否则,您将得到一个system.NullReferenceException

注:后面三种方法用的是三大对象,各自的特点请参考其他资料。


0 0
原创粉丝点击