在一般有用戶登錄的網站中,都會有需要用戶登錄后才能操作的頁面,如果在用戶登錄后能跳轉到之前的頁面,就會給用戶一個很好的體驗,也能讓他們更容易的瀏覽要操作的頁面。這中間主要用到的是獲取Url參數,獲取后用於跳轉。
主要實現步驟:
為了能很好的說明,主要已兩個頁面為例,order.aspx,login.aspx
1、order.aspx,實現訂單頁面,主要功能是實現用戶在選定商品時提交訂單,但用戶必須登陸后才能實現提交的功能,這樣才知道是哪個買的嘛。。
以代碼表示,能更清楚,在加載到order.aspx頁面時,判斷用戶是否登錄,這判斷用session判斷
protected void Page_Load(object sender, EventArgs e)
{
string returnUrl = Request.Url.AbsoluteUri;//獲取當前url地址
if (Session["user"] == null)
{
Response.Redirect("/login.aspx?url=" + Server.UrlEncode(returnUrl));
}
else
{
//執行訂購操作,該用戶已經登錄
}
}
上面主要是實現把當前頁的url地址傳遞給登錄頁面
2、login.aspx 實現用戶登錄,得到傳遞過來的Url參數
代碼如下:
//登錄方法
private bool Login()
{
//用戶驗證
//...略...
//判斷跳轉
if (!string.IsNullOrEmpty(Request.QueryString["url"]))
{
//跳轉到登錄前頁面
string returnUrl = Request.QueryString["url"].ToString();
Response.Redirect(Server.UrlDecode(returnUrl));
}
else
{
//登錄頁面登錄的
}
}
只需簡單的跳轉就可以實現,如果這樣類似的操作很多,最好給予封裝成方法統一調用
注: 如果在跳轉的頁面是在虛擬目錄下,而不是根站點目錄下,設置有些不同,就要進行判斷。。。
這樣的話 就要進行url虛擬目錄判斷
/// <summary>
/// 判斷url路徑 是否為根目錄
/// </summary>
/// <returns></returns>
public static string GetRootUrl()
{
string AppPath = "";
HttpContext HttpCurrent = HttpContext.Current;
HttpRequest Req;
if (HttpCurrent != null)
{
Req = HttpCurrent.Request;
string UrlAuthority = Req.Url.GetLeftPart(UriPartial.Authority);
if (Req.ApplicationPath == null || Req.ApplicationPath == "/")
//直接安裝在 Web 站點
AppPath = UrlAuthority;
else
//安裝在虛擬子目錄下
AppPath = UrlAuthority + Req.ApplicationPath;
}
return AppPath;
}
代碼注釋:Req.Url.GetLeftPart(UriPartial.Authority); 返回http://localhost 在根目錄情況下,如果是在虛擬目錄下(虛擬目錄設置為web)則返回的是http://localhost/web
這樣在order.apsx頁面中就在執行跳轉之前就要加上Req.Url.GetLeftPart(UriPartial.Authority)的返回值
如: string returnUrl =Req.Url.GetLeftPart(UriPartial.Authority)+ Request.Url.AbsoluteUri;//獲取當前url地址
這樣就能正確的執行跳轉了。。。
附:
這里附上Request獲取url信息的各種方法比較
以下轉自:http://www.cnblogs.com/dudu/archive/2004/02/20/1435.html
測試的url地址是http://www.test.com/testweb/default.aspx, 結果如下:
Request.ApplicationPath: /testweb
Request.CurrentExecutionFilePath: /testweb/default.aspx
Request.FilePath: /testweb/default.aspx
Request.Path: /testweb/default.aspx
Request.PathInfo:
Request.PhysicalApplicationPath: E:/WWW/testweb/
Request.PhysicalPath: E:/WWW/testweb/default.aspx
Request.RawUrl: /testweb/default.aspx
Request.Url.AbsolutePath: /testweb/default.aspx
Request.Url.AbsoluteUri: http://www.test.com/testweb/default.aspx
Request.Url.Host: www.test.com
Request.Url.LocalPath: /testweb/default.aspx
綜上就為實現登錄跳轉的基本實現,主要是運用了url參數對跳轉前的判斷,然后在登錄的時候進行獲取。。
主要需要了解的是Request.Url的給個不同屬性