2008-08-31 5 views
7

私はプロジェクト管理Webアプリケーションを作成しています。ユーザは、タスクのリストを表示する様々な方法を有する。リストページを表示すると、タスクをクリックし、タスク編集ページにリダイレクトされます。ユーザーを編集ページから呼び出しページにリダイレクト

彼らはさまざまな方法から来ているので、私は呼び出し元のページへのユーザーをリダイレクト最高道へと同じくらい興味があります。私はいくつかのアイデアを持っていますが、他の開発者の意見を得たいと考えています。

URLをセッションに保存しますか?クッキーとして?私はオブジェクトハンドルのリダイレクトを使用するコンセプトが好きです。

答えて

5

私はViewStateを使用して参照するURLを格納します。複数のブラウザウィンドウが開いている場合、これをページのスコープの外側(セッション状態または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 paramなどを使用することは避けています。なぜなら、彼らは想定されていないページに戻って自分自身をバウンスしようとする可能性があるからです(セキュリティ上の問題がありますか?)。次に、リダイレクトオブジェクトを処理するための静的メソッドを作成します。これにより、情報を読み取り、それに応じて動作することができます。これは、リダイレクト処理を1ページ内にカプセル化します。

オブジェクトを使用することは、必要に応じて後で(返信メッセージやその他の情報を追加するなど)拡張することもできます。例えば

(これはところで2分目安です!):

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開発者の痛みプラットフォームに依存しない問題だと思います。

私はこれを達成するために2つのオプションがあると思う:それ、私はURLメソッドを好きではないURLで

  1. のparam
  2. セッション

に格納されたURLちょっと混乱しています。関連するURLごとにパラメータを含めることを忘れないでください。

私はちょうどこれのための静的メソッドを持つオブジェクトを使用したいと思います。オブジェクトは、リダイレクトURLを格納するために使用するセッション項目を囲むことになります。

(すべてのパブリックstatic)は次のような方法は、おそらく次のようになります。

  • 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)に格納します。あなたがページスコープの外に保存する場合(セッション、グローバル変数 - アプリケーション状態など)、それはトムが言ったように過度のものではありませんが、それはあなたにトラブルをもたらすでしょう。

どのような問題がありますか?ユーザーがそのブラウザの複数のタブ(ウィンドウ)を開いている場合は問題です。同じブラウザのタブ(またはウィンドウ)はおそらく同じセッションを共有し、リダイレクトは予期されたものではなく、ユーザーが感じるのはバグだということです。

マイ2ユーロ..

関連する問題