2012-04-16 12 views
0

を使用してアクションにリダイレクトします。 jquery投稿をした後でredirectToActionを試しています。MVC3を使用してjqueryポスト

編集:申し訳ありません。 RedirectToActionの戻り値に達するたびに、同じページを最新表示し、同じ現在のビューに戻ります。

次のように私のビューのコードは次のとおりです。

$("button[name='command']").click(function() { 

     var checked_status = null; 
     if ($("#select_all").is(':checked')) { 
      checked_status = true; 
     } else { 
      checked_status = false; 
     } 

     $.post('@Url.Action("SaveInvitations", "Contractors")', 
       { 
        command: $(this).val(), 
        selectedContractors: $("input[name='selectedContractors']:checked").map(function() { return $(this).val(); }).get().join(","), 
        page: $(".selected").text(), 
        CheckedAll: checked_status 
       }); 
    }); 

と私のコントローラは、次のようにあります。そして、

 if (command == "skip") 
     { 
      TempData["message"] = string.Format("No contractors where selected"); 
      RedirectToAction("Index", "Home"); 
     } 
     else 
     { 
... 
TempData["message"] = string.Format("The invitations have been send successfully."); 
       Session["subModel"] = null; 
       return RedirectToAction("Index", "Home"); 
} 

再び、イムだけでjqueryの$の.post後redirectToActionをやろうとしています。それを動作させるためには何が必要ですか?

+1

"動作しない"より具体的なものはありますか?何が起こりますか、それはあなたが期待するものとどう違うのですか?エラーメッセージが表示されますか? – Guffa

答えて

7

RedirectToActionはサーバー側の方法です。 jQueryの投稿をしているので、投稿が完了したらそれを行う必要があります。ここで

$.post('@Url.Action("SaveInvitations", "Contractors")', 
       { 
        command: $(this).val(), 
        selectedContractors: $("input[name='selectedContractors']:checked").map(function() { return $(this).val(); }).get().join(","), 
        page: $(".selected").text(), 
        CheckedAll: checked_status 
       },function(){ 
    window.location.href='@Url.Action("Index", "Home")'; 
}); 

は、それをより読みやすくするために、doneの明示的な呼び出しを使用して、上記の方法を記述し実行する別の方法です。あなたはjQueryのAjaxの操作後のリダイレクトを行っている場合

var url='@Url.Action("SaveInvitations", "Contractors")'; 
var data = { 
        command: $(this).val(), 
        selectedContractors: $("input[name='selectedContractors']:checked") 
          .map(function() { return $(this).val(); }).get().join(","), 
        page: $(".selected").text(), 
        CheckedAll: checked_status 
      }; 
$.post(url,data) 
    .done(function(){ 
     window.location.href='@Url.Action("Index", "Home")'; 
    }); 

、なぜ直接対処法(正規形ポスティング)を呼び出し、そこからリダイレクトするのですか?人々は通常、部分的なページ更新を行うためにjQueryのajax操作を使用します。このようにしたいと思っていますか?

+0

はい、普通の投稿をする方が簡単かもしれませんが、アクションで送信するパラメータを捕まえる方法はわかりませんので、jsでキャッチして投稿するか、少なくとも、今すぐ私のために速く。後でリファクタリングをすることができます。 –

+0

強く入力されたビューを使用し、アクションに投稿します。これはこのアプローチよりもはるかに優れています。 javascriptが無効になっているブラウザでサイトにアクセスした場合はどうなりますか? – Shyju

+0

ページは非常に複雑なので、私は最初にいくつかの問題を抱えていましたが、リファクタリングを行い、ビューモデルオブジェクトでそれらをキャッチしようとします。 –