2017-03-10 32 views
0

私はjQuery、Json、Ajaxを学ぶのが初めてです。概念をはっきりと理解しようとしていますが、ちょっと難しいことがあります。AJAX POSTを使用しているときに 'RedirectToAction'に悪いですか? (ASP.NET)

私はajax POST Deleteメソッドが動作していますが、私のprofです。私のコントローラのコードをリファクタリングして全体的なパフォーマンスを改善するように求めました。

これはコントローラ

// POST: Course/Delete/5 
     [HttpPost, ActionName("Delete")] 
     [ValidateAntiForgeryToken] 
     public ActionResult DeleteConfirmed(int id) 
     { 
      Course course = courseService.GetCourseByID(id);   
      courseService.DeleteCourse(id); 

      return RedirectToAction("Index"); 
     } 

そして、私のajaxコール

$('#dialog-box').on("click", '#confirm-del', function() { 

      var token = $('input[name="__RequestVerificationToken"]').val(); 
      var data = { id: id, __RequestVerificationToken: token }; 

      $.ajax({ 
       type: "POST", 
       url: "@Url.Action("Delete","Course")", 
       data: data, 
       //ajaxasync: true, 
       success: function() { 
        $("#dialog").dialog("close"); 
        $('div.table-content').empty().load('.table-content'); 
        //console.log("success"); 
       }, 
       error: function() { 
        console.log("failed"); 
       } 
      }); 
     }); 

私の教授の私の削除です。コメント "投稿削除ajaxはリロードのページを呼び出すか、ajaxに行きますか?リロードされたようです。ajaxのいくつかの要素の色を変更してajax呼び出しに行くことを確認します。 "

これは、私が問題を完全に理解することができないため、何をすべきかを明確にすることを求めた後でした。これは、ページをリロードしてから何もできません。

return RedirectToAction (Index)の代わりに私がちょうどreturn View()であれば、それはパフォーマンスが向上し、問題の世話をするでしょう。話している?

+0

インストラクターがサーバーサイドのコードについて話しているようには聞こえません。彼はクライアントサイドのコードについて話しています。彼はJavaScriptであなたのAJAXのコールバックのいくつかの目に見える変化を実行して、ページをリロードせずにAJAX呼び出しが成功したことを確認するよう要求しています。 (ページがリロードされた場合、可視の変更はもう存在しないため) – David

答えて

1

あなたの教授が正しいクライアント側で処理されていないを処理していないので。 Ajax経由でアクション・メソッドを呼び出す予定がある場合は、RedirectToActionを使用しないでください。

代わりに、JsonResultを返す必要があります。例えばFYI、

[HttpPost, ActionName("Delete")] 
[ValidateAntiForgeryToken] 
public ActionResult DeleteConfirmed(int id) 
{ 
    Course course = courseService.GetCourseByID(id); 
    courseService.DeleteCourse(id); 

    return Json("Course was deleted successfully."); 
} 

:あなたは本当にまれにAjax呼び出し内の別のページにリダイレクトする必要がある場合、あなたはJavaScriptResultを使用することができます。

+0

'.empty().load( '..')'私のAjaxで削除後に自動的にテーブルをリフレッシュする。問題になるのだろうか? – Truecolor

+0

* DeleteConfirmed *メソッドが* JsonResult *を返す限り、問題ではありません。 – Win

+0

これは愚かな質問である場合はお詫び申し上げますが、どうすればJsonResultを返すのか分かりますか?私は、削除が機能していることを意味しますが、削除したページに表示されるはずのメッセージが「コースは正常に削除されました」というメッセージは表示されません。 – Truecolor

0

return RedirectToAction("Index");は、あなたのケースでリダイレクトするURL(ホーム/インデックス)を含むHTTPステータス302を返します。

あなたはAJAXハンドラで、このHTTPステータス(成功が2XXコードとエラー4XXと5XXコードを扱う)、応答が全く

+0

申し訳ありませんが、私はクライアント側とサーバー側の面でより混乱しています。それは問題なのですか? – Truecolor

+1

クライアント側のajaxがサーバーを呼び出している - >サーバーがリダイレクト結果HTTPステータスで応答する302 - > ajaxハンドラがこの応答を処理する方法を知らない –

関連する問題