2008-08-31 99 views
7

我正在開發項目管理Web應用程序。用戶有多種方式來顯示任務列表。查看列表頁面時,他們點擊任務並重定向到任務編輯頁面。將用戶從編輯頁面重定向到調用頁面

由於他們是從多種途徑來了,我只是好奇,到最好方式重定向用戶返回到調用頁面。我有一些想法,但希望得到其他開發人員的意見。

你會存儲在會話中調用 url嗎?作爲一個cookie?我喜歡使用對象句柄重定向的概念。

回答

5

我會使用ViewState存儲引用URL。如果超過一個瀏覽器窗口打開,將其存儲在頁面範圍之外(即在Session狀態或Cookie中)可能會導致問題。

下面的示例驗證頁面是在內部調用的(即不是直接請求),並在用戶提交響應後反彈回引用頁面。

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Request.UrlReferrer == null) 
     { 
      //Handle the case where the page is requested directly 
      throw new Exception("This page has been called without a referring page"); 
     } 

     if (!IsPostBack) 
     { 
      ReturnUrl = Request.UrlReferrer.PathAndQuery; 
     } 
    } 

    public string ReturnUrl 
    { 
     get { return ViewState["returnUrl"].ToString(); } 
     set { ViewState["returnUrl"] = value; } 
    } 

    protected void btn_Click(object sender, EventArgs e) 
    { 
     //Do what you need to do to save the page 
     //... 

     //Go back to calling page 
     Response.Redirect(ReturnUrl, true); 
    } 
} 
1

我個人會將所需的重定向信息存儲在一個對象中並進行全局處理。我會避免使用QueryString參數或類似的,因爲他們可以嘗試自己跳回到他們不應該的頁面(可能的安全問題?)。然後,您可以創建一個靜態方法來處理重定向對象,該對象可以讀取信息並相應地執行操作。這將您的重定向過程封裝在一個頁面中。

使用對象還意味着您可以稍後擴展它(如添加返回消息和其他信息)。

例如(這是2分鐘的粗略指導BTW!):

public partial class _Default : System.Web.UI.Page 
{ 

    void Redirect(string url, string messsage) 
    { 
     RedirectionParams paras = new RedirectionParams(url, messsage); 
     RedirectionHandler(paras); // pass to some global method (or this could BE the global method) 
    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     Redirect("mypage.aspx", "you have been redirected"); 
    } 
} 

public class RedirectionParams 
{ 
    private string _url; 

    public string URL 
    { 
     get { return _url; } 
     set { _url = value; } 
    } 

    private string _message; 

    public string Message 
    { 
     get { return _message; } 
     set { _message = value; } 
    } 

    public RedirectionParams(string url, string message) 
    { 
     this.URL = url; 
     this.Message = message; 
    } 
} 
1

這個消息我被標記asp.net但我認爲這是因爲他們尋求一個「乾淨」的方式做到這一點,所有的痛苦新的Web開發人員的平臺獨立的問題。

我認爲實現這一目標的兩個選項是:

  1. URL中的PARAM
  2. 存儲在會話中的URL

我不喜歡的網址的方法,它有點混亂,你必須記住在每個相關URL中包含參數。

我只是使用靜態方法的對象。該對象將環繞用於存儲重定向URLS的會話項目。

的方法很可能是如下(所有公共靜態):

  • setRedirectUrl(字符串URL)
  • doRedirect(字符串defaultURL)

setRedirectUrl會在任何訴訟被稱爲是產生需要重定向到給定url的鏈接/表單。所以假設你有一個項目視圖動作,它產生一個項目列表,每個項目都有可以在其上執行的任務(例如刪除,編輯),你可以在代碼中調用RedirectClass.setRedirectUrl(「/ project/view-all」)這個動作。然後讓我們說用戶點擊刪除,他們需要在刪除操作後重定向到視圖頁面,因此在刪除操作中,您可以調用RedirectClass.setRedirectUrl(「/ project/view-all」)。此方法將查看是否在會話中設置了重定向變量。如果是這樣重定向到該URL。如果沒有,則重定向到默認url(傳遞給setRedirectUrl方法的字符串)。

1

我同意「rmbarnes.myopenid.com」關於此問題的獨立平臺。

我會將調用頁面URL存儲在QueryString或隱藏字段中(例如在ViewState for ASP.NET中)。如果你將它存儲在頁面範圍之外(比如Session,全局變量 - 應用程序狀態等),那麼它就不會像湯姆說的那樣矯枉過正,但會給你帶來麻煩。

什麼樣的麻煩?如果用戶打開了該瀏覽器的多個選項卡(窗口),則會出現問題。同一瀏覽器的選項卡(或窗口)可能會共享同一個會話,重定向不會是預期的,並且所有用戶都會覺得它是一個錯誤。我的2歐元..