方法一:問號傳值(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
注:后面三種方法用的是三大對象,各自的特點請參考其他資料。