JQuery вызывает Action на контроллере (но не перенаправляет после) - PullRequest
4 голосов
/ 13 мая 2009

У меня есть всплывающее окно подтверждения JQuery с кнопками Да, Нет. Кнопка Да вызывает эту функцию:

   function doStuff() {
            $('#confirmPopup').dialog("close");
            var someKey = $("#someKey")[0].value;
            $.post("/MYController/MyAction", { someKey : someKey },
           function(responseText, textStatus, XMLHttpRequest) {

            });
            return false;
        }

Это успешно вызывает действие моего контроллера (2 разные попытки):

 public ActionResult MyAction(int someKey)
 {
     //do stuff
     return RedirectToAction("OtherAct", "OtherCont");
}



 public JavaScriptResult MyAction(int someKey)
     {
         //do stuff
         return JavaScript("Window.location.href='OtherCont/OtherAct';");
    }

В обоих случаях действие выполняется, но перенаправления на другое действие не происходит. почему?

Ответы [ 4 ]

3 голосов
/ 13 мая 2009

Потому что вы не можете перенаправить из действия, которое вызывается асинхронно ($ .post). Посмотрите здесь для альтернативы.

1 голос
/ 14 ноября 2009

OtherAct на OtherContController ... он украшен [AcceptVerbs (HttpVerbs.Post)]?

Если так, то это первая из ваших проблем. Ваше действие, которое возвращает JavaScriptResult, будет работать. Но если действие декорировано с помощью HttpVerbs.Post, то для этого нет действия Get и вызов Ajax получает 404, а не . Конечно, поскольку это происходит асинхронно, у вас не будет возможности это узнать. Сообщения об ошибках не отображаются.

Вторая проблема проще. Вы сказали ...

return JavaScript("Window.location.href='OtherCont/OtherAct';")

... когда ты имел в виду ...

return JavaScript("window.location.href='OtherCont/OtherAct';")

... или точнее ...

return JavaScript("window.location.href='" + 
       Url.Action("OtherAct", "OtherCont") + "';");

Это должно привести вас туда.

0 голосов
/ 13 мая 2009

Поскольку вы используете ajax, это означает, что перенаправление из действия будет игнорироваться.

Решением для вызова перенаправления может быть создание другого помощника, который использует обычный FORM POST и не использует ajax ... тогда вся страница будет POST и действие будет перенаправлено.

Вот часть моего помощника, которая делает именно это:

        string deleteLink = String.Format(@"<a onclick=""deleteRecord({0})"" href='#'>Delete</a><form id='deleteForm' method='post' action='" +
             routeRelativePath + "/" + actionPrefix + "Delete/" + model.ID +
            @"'></form>", model.ID);

.. больше на вышеуказанном.

0 голосов
/ 13 мая 2009

У меня были проблемы с перенаправлением вызовов веб-службы, когда они не будут работать таким образом.

Другой подход - отправить URL, который вы хотите перенаправить, обратно клиенту, а затем использовать Javascript для перенаправления (Window.location.href = ....)

Или просто отправьте HTML вместо вызова веб-службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...