2017-04-26 5 views
0

SignIn()に投稿されたすべてのビューで使用される私の_Layout.cshtml部分ビュー内にAJAX関数があります。ログインに失敗した場合は、SignInFailed()にリダイレクトされ、単にビューが返されます。代わりに、ビューを返すと、元のビューにリダイレクトされます。ASP.NET MVCはAJAXでアクションリダイレクトを防止します

SignInFailed()に残らないような例外やエラーは発生していません。ここで

は私のAJAXです:この動作を防ぐためにそうすると私は何ができるの指示がないとき

$.ajax({ 
      type: "POST", 
      traditional: true, 
      url: "@Url.Action("SignIn", "Home")", 
      data: { user: name, password: code, pageName: urlPage }, 
        success: function() { 
         ///do stuff 
        }, 
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
         if (debug) { 
          alert(XMLHttpRequest.responseText); 
          alert(textStatus); 
          alert(errorThrown); 
         } 
        } 
}); 

は、なぜそれが元の表示に戻ってリダイレクトされますか?

+3

そのバック元view_に_redirectingません。そのajaxコールとajaxコールは決してリダイレクトされません。あなたは決してページを離れませんでした。アヤックスの全体のポイントは、同じページにとどまることです。 –

+0

@StephenMueckeです。アクションを '' 'RedirectToAction'を返すように設定しても、それは同じページに残りますか? – Sicypher

+2

はい。 (これはAjaxの目的全体です) –

答えて

1

Stephen Mueckeは私の質問のコメントで、AJAXはページをリフレッシュまたはリダイレクトすることなくポストしてデータを取得するように設計されています。なぜ私の以前の方法はうまくいかなかったのですか?バックエンドでリダイレクトしようとするのではなく、バックエンドからJSONを返して、フロントエンドにログインが成功したかどうかを知らせます。その後、結果に応じて、JavaScriptでリダイレクトまたは更新します。

私はJSONを返すために私SignIn()アクションを変更:

public ActionResult SignIn(string user, string password) 
{ 
    //Some database stuff validating username and password 
    if (loginSuccessful) 
    { 
     return Json(new { status = "success" }); 
    } 
    else 
    { 
     return Json(new { status = "failure", redirectUrl = "/Home/SignInFailed" }); 
    } 

} 

を、私はに私のAJAXを変更:

$.ajax({ 
      type: "POST", 
      traditional: true, 
      url: "@Url.Action("SignIn", "Home")", 
      data: { user: name, password: code }, 
        success: function (result) { 

         if (result.status == "success") { 
          location.reload(); 
         } 
         else { 
          location.href = result.redirectUrl; 
         } 
        }, 
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
         if (debug) { 
          alert(XMLHttpRequest.responseText); 
          alert(textStatus); 
          alert(errorThrown); 
         } 
        } 
}); 
関連する問題