将Ajax帖子与MVC控制器和重定向相结合

时间:2016-10-25 12:44:54

标签: javascript jquery ajax asp.net-mvc

我正在努力让我的服务器端代码与我们从设计机构获得的一些页面模板很好地配合。一切都很好,除了我正在努力用表单提交的结果实现正确的行为。

如果表单成功提交,会触发一些JQuery动画成功消息。如果没有,则应将用户重定向到错误页面。

这是表单提交脚本:

$.ajax({
    type: 'POST',
    data: JSON.stringify(userObject),
    url: submitFormUrl,
    contentType: 'application/json; charset=utf-8',
    cache: 'false',
    dataType: 'json',
    success: function (data) {
        if(data.Success){
            console.log('success');
            $('.thanks-msg').fadeIn(1000);
            $('#market-message').hide();
        }else{
            console.log('Error');
        }
    }
});

这是它发布的控制器操作:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(User userObject)
{
    bool userExists;
    try
    {
        if (ModelState.IsValid)
        {
            userExists = InsertUser(userObject); //calls a sproc
        }
        else
        {
            return CollectValidationErrors(); // collects all validation errors into a string
        }
    }
    catch(Exception ex)
    {
        ViewBag.ErrorMessage = "Sorry! There has been an error " + ex.Message;
        return Json(new { result = "Redirect", url = Url.Action("Error", "Home") });
    }

    if(userExists)
    {
        ViewBag.ErrorMessage = "This user already exists";
        return Json(new { result = "Redirect", url = Url.Action("Error", "Home") });
    }

    return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}

接收表单提交并且代码内部执行成功后会发生什么。但是如果返回错误状态,则没有重定向。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

尝试使用ajax调用的error属性:

$.ajax({
    type: 'POST',
    data: JSON.stringify(userObject),
    url: submitFormUrl,
    contentType: 'application/json; charset=utf-8',
    cache: 'false',
    dataType: 'json',
    error: function (XMLHttpRequest, textStatus, errorThrown) {
         //Do Something
    },
    success: function (data) {
        if(data.Success){
            console.log('success');
            $('.thanks-msg').fadeIn(1000);
            $('#market-message').hide();
        }else{
            console.log('Error');
        }
    }
});

答案 1 :(得分:1)

您不发送错误。 您可以在Controller Action中抛出异常(强制HTTP状态500内部服务器错误)。这将导致不调用成功,而是调用ajax的错误函数。

$.ajax({
    type: 'POST',
    data: JSON.stringify(userObject),
    url: submitFormUrl,
    contentType: 'application/json; charset=utf-8',
    cache: 'false',
    dataType: 'json',
    success: function (data) {
        if(data.Success){
            console.log('success');
            $('.thanks-msg').fadeIn(1000);
            $('#market-message').hide();
        }else{
            console.log('Error');
        }
    },
    error: function(function (xhr, status, errorThrown)){
            // Do Redirect
        }
});