将用户从编辑页面重定向到调用页面

将用户从编辑页面重定向到调用页面

问题描述:

我正在开发项目管理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开发人员的平台独立的问题。

我认为实现这一目标的两个选项是:

  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方法的字符串)。

我同意“rmbarnes.myopenid.com”关于此问题的独立平台。

我会将调用页面URL存储在QueryString或隐藏字段中(例如在ViewState for ASP.NET中)。如果你将它存储在页面范围之外(比如Session,全局变量 - 应用程序状态等),那么它就不会像汤姆说的那样矫枉过正,但会给你带来麻烦。

什么样的麻烦?如果用户打开了该浏览器的多个选项卡(窗口),则会出现问题。同一浏览器的选项卡(或窗口)可能会共享同一个会话,重定向不会是预期的,并且所有用户都会觉得它是一个错误。我的2欧元..