3

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

私はそのような結果を得るためにこれを書きました:

 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);
        }
    } 

私のアクションメソッドでは、単に新しいRefreshResultを返します。それは機能しますが、私はそのようなアプローチの可能な制限に興味があります。そのような結果を直接返すアクションメソッドにアクセスするオプションを顧客に提供することに興味がないので、常に現在のページをそのような方法で更新できると思います。私は正しいですか?

私はstackoverflowでこれ(および他のいくつかの質問)を見つけました: ActionResultはそれを呼び出したページに戻ります

しかし、私は「ハウツー」ではなく、そのようなアプローチの可能な制限にもっと興味を持っています。

よろしくお願いします

4

2 に答える 2

8

ルーアンの答えは、ページを更新する1つの方法です。もう1つは、リクエストの送信元のURLにリダイレクトすることです。実装を自分で作成する必要はなく、コントローラーの通常のアクションで実行するだけです。

アクションは次のようになります

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

    return Redirect(Request.UrlReferrer.ToString());
}
于 2017-08-25T16:47:14.737 に答える
2

「現在のページを強制的に更新する結果」とはどういう意味かわかりません。サーバーでアクションを実行している場合は、すでにページを「更新」しています。

GETアクションによって元のページに再び「着陸」するために、ある種のリダイレクト後のgetパターンが必要な場合は、非常に簡単です。RedirectToRouteResultから派生したカスタムActionResultを実装するだけです(RedirectToAction()メソッドで使用されます)。コントローラ)、および現在のルート値を供給します。

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

于 2011-08-18T12:09:55.803 に答える