简体   繁体   中英

MVC RedirectToAction Doesn't Work After JSON Post Return

I am trying to change the page after post process of the AJAX process which executes by MVC. I have used it different way maybe my usage might be wrong.

C# MVC code part. I am sending int list which is user list and process and do something.

[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
}

My problem is redirect part do not work after the MVC process ends. Process works, only redirect doesn't.

JavaScript code here

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

Added this to AJAX and it is not working too

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

Once you are using AJAX the browser is unaware of the response.

The AJAX success in its current form failed because redirect response code is not in the 2xx status but 3xx

You would need to check the actual response and perform the redirect manually based on the location sent in the redirect response.

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

//...

Update

Working part for anyone who need asap:

Controller Part:

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

Html part:

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

Just deleted

dataType: 'json'

Part because I am using my own data type instead of JSON.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM