Ajax представляет редирект MVC 3 - PullRequest
1 голос
/ 25 марта 2012

Хотя я прочитал десятки ответов, я не смог найти решение.Я использую MVC 3 с Razor.У меня есть простая форма с проверкой клиента через ajax.Эта часть отлично работает.Моя проблема: в обновлении Action моего контроллера я хочу перенаправить на другое действие.Если пользователь отключает Javacript, это работает нормально.Но с включенным javascript / ajax перенаправление не работает.Вместо этого выглядит, как будто выполняется какое-то частичное представление или что-то подобное.

Мой контроллер / код действия:

Function UpdateItem(Item As CItem) As ActionResult

  ' some validation code, save etc.

  if everythingok then
        Return RedirectToAction("Updatesuccess")
  else
        Return RedirectToAction("EditItem")
  endif

End Function

Моя HTML-страница выглядит так (сокращенно / псевдо):

Logo image
H1
some text

<form>....</form>

Когда форма отправляется через ajax, новый HTML-код добавляется за пределы «некоторого текста», поэтому форма заменяется, но все, что находится над замененной формой, остается на странице.Когда ajax / javascript отключен, после отправки загружается новая страница.Я проверил заголовки http и заметил, что в ajax нет перенаправления (что в некоторой степени логично, потому что это ajax).Что я могу сделать?Я хочу перенаправить на новую страницу.

Можно ли отключить ajax-submit и использовать только "нормальную" форму-submit?Мне нравится проверка клиента через ajax, когда пользователь вводит данные, и я хочу использовать это, но для меня это было бы достаточно, если бы отправка была "нормальной" отправкой.

Надеюсь, кто-то понимает, что я хочу, и может мне помочь.

Спасибо.

1 Ответ

3 голосов
/ 25 марта 2012

Я не уверен на 100%, что понимаю ваш вопрос, но, черт возьми, не опускайте меня :)

Проблема в том, что перенаправление работает через отправку HttpResponse с перенаправлением, указанным взаголовки, которые понимает браузер.Если вы отправляете через AJAX, запрос обрабатывается не браузером, а вашим СОБСТВЕННЫМ JS-кодом.

Вот хитрость: вместо возврата перенаправления верните URL (желательно как json), а затем перенаправьте вручную, используя window.location.Я не бегло говорю на VB, вот как я это делаю в C #:

var url = new UrlHelper(this.ControllerContext.RequestContext);
var link = url.Action("UpdateSuccess");
return Json(new {link});

, а затем в jQuery:

    $.ajax({ method: 'POST',
             url: 'your post url', 
             success: function(result) {window.location = result.link; },
             // ... (passing form etc)
     });
...