MVC RedirectToAction не работает после JSON Post Return - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь изменить страницу после пост-процесса AJAX-процесса, который выполняется MVC.Я использовал его по-другому, может быть, мое использование может быть неправильным.

C # MVC часть кода.Я отправляю int list, который является списком пользователей, обрабатывает и что-то делает.

[HttpPost]
public ActionResult SelectUserPost(int[] usersListArray)
{
    // lots of code but omitted

    return JavaScript("window.location = '" + Url.Action("Index", "Courses") + "'"); // this does not work
    return RedirectToAction("Index"); // this also does not            
    return RedirectToAction("Index","Courses"); // this also does not
}

Моя проблема заключается в том, что часть перенаправления не работает после завершения процесса MVC.Процесс работает, только перенаправление не работает.

Код JavaScript здесь

// Handle form submission event
$('#mySubmit').on('click',
    function(e) {
        var array = [];
        var rows = table.rows('.selected').data();
        for (var i = 0; i < rows.length; i++) {
            array.push(rows[i].DT_RowId);
        }

        // if array is empty, error pop box warns user
        if (array.length === 0) {
            alert("Please select some student first.");
        } else {
            var courseId = $('#userTable').find('tbody').attr('id');

            // push the id of course inside the array and use it
            array.push(courseId);
            $.ajax({
                url: "/Courses/SelectUserPost",
                type: "POST",
                data: JSON.stringify(array),
                dataType: "json",
                contentType: 'application/json; charset=utf-8'
            });
        }
    });

Добавил это в AJAX, и он тоже не работает

success: function() {
  window.location.href = "@Url.Content("~/Courses/Index")";
}

1 Ответ

0 голосов
/ 25 декабря 2018

Когда вы используете AJAX, браузер не знает об ответе.

AJAX success в его текущей форме не выполнен, поскольку код ответа перенаправления находится не в состоянии 2xx, а 3xx

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

//...
success: function(response) { 
    if (response.redirect) {
        window.location.href = response.redirect;
    } else {
        //...
    }
}

//...

Обновление

Рабочая часть для всех, кто нуждается как можно скорее:

Часть контроллера:

 return RedirectToAction("Index","Courses");

Часть HTML:

$.ajax({
        url: "/Courses/SelectUserPost",
        type: "POST",
        data: JSON.stringify(array),
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            alert("Successful!");
            window.location.href = "@Url.Content("~/Courses/Index")";
        }
    });

Только что удалено

dataType: 'json'

Part, потому что я использую свой собственный тип данных вместо JSON.

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