2016-10-25 2 views
0

デザイン代理店から入手したいくつかのページテンプレートを使ってサーバー側のコードをうまく再生しようとしています。フォーム提出の結果を使って正しい振る舞いを実装するのに苦労していることを除いて、すべてが良いです。AjaxのポストとMVCコントローラとリダイレクトを組み合わせる

フォームが正常に送信されると、何らかのJQueryがトリガされて成功メッセージにアニメートされます。そうでない場合は、エラーページにリダイレクトする必要があります。

$.ajax({ 
    type: 'POST', 
    data: JSON.stringify(userObject), 
    url: submitFormUrl, 
    contentType: 'application/json; charset=utf-8', 
    cache: 'false', 
    dataType: 'json', 
    success: function (data) { 
     if(data.Success){ 
      console.log('success'); 
      $('.thanks-msg').fadeIn(1000); 
      $('#market-message').hide(); 
     }else{ 
      console.log('Error'); 
     } 
    } 
}); 

そして、ここではそれがポストすることをコントローラのアクションです:何が起こることは、フォームの送信を受信し、コードが内部に正常に実行されていることである

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Register(User userObject) 
{ 
    bool userExists; 
    try 
    { 
     if (ModelState.IsValid) 
     { 
      userExists = InsertUser(userObject); //calls a sproc 
     } 
     else 
     { 
      return CollectValidationErrors(); // collects all validation errors into a string 
     } 
    } 
    catch(Exception ex) 
    { 
     ViewBag.ErrorMessage = "Sorry! There has been an error " + ex.Message; 
     return Json(new { result = "Redirect", url = Url.Action("Error", "Home") }); 
    } 

    if(userExists) 
    { 
     ViewBag.ErrorMessage = "This user already exists"; 
     return Json(new { result = "Redirect", url = Url.Action("Error", "Home") }); 
    } 

    return Json(new { success = true }, JsonRequestBehavior.AllowGet); 
} 

はここ

は、フォームがスクリプトを提出します。しかし、エラー状態が返された場合、リダイレクトはありません。

私は間違っていますか?

+0

あなたが示したコードは、説明していることを行うことができません。 Javascriptは大文字と小文字を区別する言語で、 'return Json(new {success = true}、JsonRequestBehavior.AllowGet);'という行はプロパティ 'success'を持つクライアント側オブジェクト' data'を生成し、 'data.Success'は'undefined'は' false'をブール値として評価します。 – Igor

答えて

1

はAJAX呼び出しのerrorプロパティを使用してみてください:

$.ajax({ 
    type: 'POST', 
    data: JSON.stringify(userObject), 
    url: submitFormUrl, 
    contentType: 'application/json; charset=utf-8', 
    cache: 'false', 
    dataType: 'json', 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     //Do Something 
    }, 
    success: function (data) { 
     if(data.Success){ 
      console.log('success'); 
      $('.thanks-msg').fadeIn(1000); 
      $('#market-message').hide(); 
     }else{ 
      console.log('Error'); 
     } 
    } 
}); 
1

あなたがエラーを送信しません。 Controller ActionにException(HTTP Status 500 Internal Server Errorを強制する)をスローすることができます。成功は呼び出されず、ajaxのエラー関数が呼び出されます。

$.ajax({ 
    type: 'POST', 
    data: JSON.stringify(userObject), 
    url: submitFormUrl, 
    contentType: 'application/json; charset=utf-8', 
    cache: 'false', 
    dataType: 'json', 
    success: function (data) { 
     if(data.Success){ 
      console.log('success'); 
      $('.thanks-msg').fadeIn(1000); 
      $('#market-message').hide(); 
     }else{ 
      console.log('Error'); 
     } 
    }, 
    error: function(function (xhr, status, errorThrown)){ 
      // Do Redirect 
     } 
}); 
関連する問題