我正在開發項目管理Web應用程序。用戶有多種方式來顯示任務列表。查看列表頁面時,他們點擊任務並重定向到任務編輯頁面。將用戶從編輯頁面重定向到調用頁面
由於他們是從多種途徑來了,我只是好奇,到最好方式重定向用戶返回到調用頁面。我有一些想法,但希望得到其他開發人員的意見。
你會存儲在會話中調用 url嗎?作爲一個cookie?我喜歡使用對象句柄重定向的概念。
我正在開發項目管理Web應用程序。用戶有多種方式來顯示任務列表。查看列表頁面時,他們點擊任務並重定向到任務編輯頁面。將用戶從編輯頁面重定向到調用頁面
由於他們是從多種途徑來了,我只是好奇,到最好方式重定向用戶返回到調用頁面。我有一些想法,但希望得到其他開發人員的意見。
你會存儲在會話中調用 url嗎?作爲一個cookie?我喜歡使用對象句柄重定向的概念。
我會使用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);
}
}
我個人會將所需的重定向信息存儲在一個對象中並進行全局處理。我會避免使用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;
}
}
這個消息我被標記asp.net但我認爲這是因爲他們尋求一個「乾淨」的方式做到這一點,所有的痛苦新的Web開發人員的平臺獨立的問題。
我認爲實現這一目標的兩個選項是:
我不喜歡的網址的方法,它有點混亂,你必須記住在每個相關URL中包含參數。
我只是使用靜態方法的對象。該對象將環繞用於存儲重定向URLS的會話項目。
的方法很可能是如下(所有公共靜態):
setRedirectUrl會在任何訴訟被稱爲是產生需要重定向到給定url的鏈接/表單。所以假設你有一個項目視圖動作,它產生一個項目列表,每個項目都有可以在其上執行的任務(例如刪除,編輯),你可以在代碼中調用RedirectClass.setRedirectUrl(「/ project/view-all」)這個動作。然後讓我們說用戶點擊刪除,他們需要在刪除操作後重定向到視圖頁面,因此在刪除操作中,您可以調用RedirectClass.setRedirectUrl(「/ project/view-all」)。此方法將查看是否在會話中設置了重定向變量。如果是這樣重定向到該URL。如果沒有,則重定向到默認url(傳遞給setRedirectUrl方法的字符串)。
我同意「rmbarnes.myopenid.com」關於此問題的獨立平臺。
我會將調用頁面URL存儲在QueryString或隱藏字段中(例如在ViewState for ASP.NET中)。如果你將它存儲在頁面範圍之外(比如Session,全局變量 - 應用程序狀態等),那麼它就不會像湯姆說的那樣矯枉過正,但會給你帶來麻煩。
什麼樣的麻煩?如果用戶打開了該瀏覽器的多個選項卡(窗口),則會出現問題。同一瀏覽器的選項卡(或窗口)可能會共享同一個會話,重定向不會是預期的,並且所有用戶都會覺得它是一個錯誤。我的2歐元..