2011-08-11 13 views
2

いくつかのアクションメソッドから、現在のページを強制的にリフレッシュする結果を返したいと思います。actionresult現在のページをリフレッシュする

私はそのような結果を取得するためにこれを書いた:私は単に新しいRefreshResultを返す私のアクションメソッドで

public class RefreshResult : ActionResult { 

     public override void ExecuteResult(ControllerContext context) { 
      Uri referrer = context.HttpContext.Request.UrlReferrer; 
      if(referrer == null || string.IsNullOrEmpty(referrer.AbsoluteUri)) { 
       return; 
      } 
      context.HttpContext.Response.Redirect(referrer.AbsoluteUri); 
     } 
    } 

を。それは機能しますが、私はそのようなアプローチの可能性のある制限が不思議です。私は顧客にそのような結果を直接返すアクションメソッドにアクセスするオプションを与えることに躊躇しているわけではないので、私は常にこのような方法で現在のページをリフレッシュできると思う。私は正しい?

私はstackoverflowの上で、この(および他の質問のカップルを)見つけ: ActionResult return to page that called it

しかし、私はこのようなアプローチの可能性の限界ではなく、「どのように」で、よりintrestedています。

ありがとう、事前

+0

のように見えるかもしれませんか? –

+0

実際に私はRedirectToRouteResultを使用していましたが、私はそれにルート値を提供する必要があるのが好きではありません。私はリダイレクトするURLを知る必要はありません。 – objectbox

+0

私はあなたのコメントを理解していません。あなたのコードでは、あなたはURLにredirctを返します。RedirectResultは、新しいRedirectResult(referrer.AbsoluteUri)を返します。そのトリックは、私のポイントだったために新しいクラスを作成する必要はありません –

答えて

2

に私はあなたが「リフレッシュするために、現在のページを強制的結果」とはどういう意味かわかりません。サーバー上でアクションを実行している場合は、既にページを「リフレッシュ」しています。

元のページにGETアクションで再度「着陸」するために、何らかのポストリダイレクト取得パターンがあれば、それは非常に簡単です。RedirectToRouteResultから派生したカスタムActionResultを実装するだけです(RedirectToAction ()メソッドを使用して)、現在のルート値を供給します。

リファラーに基づくあなたのアプローチは全く悪いことではありませんが、リファラーはブラウザによって送信されるヘッダーであり、現在のルート値は常に利用可能ですが、一部のクライアントではオプションで(ブラウザなどでは無効にできます)

1

ルーアン回答は、ページを更新する方法の1つです。もう1つは、リクエストが送信されたURLにリダイレクトすることであり、実装自体を書く必要はありません。コントローラーの通常のアクションで行うだけです。

アクションは、なぜ単にRedirectResultを使用しないで、この

public ActionResult SomeAction() 
{ 
    //do some work here... 

    return Redirect(Request.UrlReferrer.ToString()); 
} 
関連する問題