4

非同期リクエストフォームのajaxフォームがリダイレクトされたかどうかを判断するにはどうすればよいですか?私の場合、ユーザーのセッションが閉じられると、リクエストはログインページにリダイレクトされます。

OnComplete、OnSuccess、およびOnBeginイベント(OnFailureは呼び出されません)の引数を確認しようとしましたが、誰も助けませんでした。

現在、セッションが終了した場合に備えて、ログインページ全体が現在のページのdivに埋め込まれています。

これを回避する方法を私が見る唯一の方法は、次のようなコードです。

function onSuccessPost(a,b,c) {
   if (a.indexOf("<!DOCTYPE html>") == 0) {
      window.location = window.location;
   }
   // ...
}

しかし、この解決策は少し醜いようです。

何か案は?

4

2 に答える 2

0

AJAX を介して呼び出されるコントローラー アクションからリダイレクトしないでください。JSON を使用できます。

public ActionResult Foo()
{
    var url = Url.Action("Bar", "Baz");
    return Json(new { location = url }, JsonRequestBehavior.AllowGet);
}

そして今、あなたの AJAX 成功コールバックで:

success: function(result) {
    window.location.href = result.location;
}

明らかに、AJAX 要求の後に常にクライアント側からリダイレクトするつもりであれば、これにより AJAX の利点が完全に失われます。標準リンクを使用してコントローラ アクションを呼び出すだけです => この場合、AJAX を使用しても意味がありません。


アップデート:

フォーム認証 Cookie の有効期限が切れたときに、LogOn ページへのリダイレクトを傍受しようとしているようです。Phil Haack のブログ: http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx

この記事では、フォーム認証モジュールが自動的にログオン ページにリダイレクトするのを防ぎ、代わりに 401 ステータス コードを送信する方法を説明しています。これは、AJAX 要求によって傍受され、クライアントでリダイレクトを実行する可能性があります。

于 2012-06-13T08:56:16.963 に答える
0
public ActionResult PossibleRedirectAction(bool isRedirect = false)
{
    ViewBag.IsRedirect = isRedirect;
}

そして、リダイレクト元のアクションにこのコードを配置します。

RedirectToAction("PossibleRedirectAction", new {isRedirect = true});
于 2012-06-13T08:53:08.640 に答える