2012-04-16 2 views
0

im using MVC3. im пытается перенаправитьToAction после выполнения jquery-сообщения.перенаправление на действие с помощью jquery post

Редактировать: извините за то, что не определен. Всякий раз, когда он достигает возвращаемого 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"); 
} 

Затем снова, им просто пытается сделать RedirectToAction после JQuery $ .post. Что я должен сделать, чтобы заставить его работать?

+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, чтобы сделать его более удобным для чтения.

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")'; 
    }); 

Если вы делаете редирект после операции Ajax JQuery, почему не напрямую вызвать метод действий (нормальная форма проводки), а затем сделать переадресацию оттуда? Обычно люди используют операции jQuery ajax для частичного обновления страниц. вы уверены, что хотите сделать это?

+0

Да, я знаю, что было бы легче сделать обычную публикацию, но я не знаю, как поймать параметры, отправленные в действие, поэтому его намного проще, если я поймаю их в js, а затем сделаю Post или Меньше всего, это быстрее для меня прямо сейчас. Я мог бы сделать рефактор позже, как только узнаю, как поймать их в действии. –

+0

Используйте строго типизированные виды и разместите их для своих действий. Это намного лучше, чем этот подход. Что делать, если кто-то обращается к вашему сайту с браузером, где javascript отключен? – Shyju

+0

Ну, сначала у меня были проблемы с этим, потому что страница очень сложная, но я сделаю рефакторинг и попытаюсь поймать их в объекте модели представления. –

Смежные вопросы