成功重定向并在失败时显示错误

Dan*_*lba 10 ajax asp.net-mvc jquery asp.net-mvc-2

我已经实现了一个控制器来创建新用户.当它成功创建用户时,它会重定向到Index().

我想要的是在一切正常时重定向,但留在当前页面并在出现故障时看到错误.

我使用的是jQuery ajaxMVC.

我的控制器看起来像这样:

[Authorize]
public ActionResult CreateUser(string username)
{
    try
    {
        //here the logic to create the user
    }   
    catch (Exception ex)
    {
        string error = string.Format("Error creating user: {0}", ex.Message);
        Response.StatusCode = 500;
        Response.Write(error);    
    }
    return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)

使用jQuery拦截表单提交,然后使用ajax进行调用:

$("#new-user-form").submit(function() {
    var form = $(this);
    $.ajax({
    type: "GET",
        url: form.attr('action'),
        data: form.serialize(),
        success: function(data, textStatus, xhr) {
            //At this point I would like to redirect
        },
        error: function(xhr, textStatus, errorThrown) {
            $(".error-summary").html(xhr.responseText);
        }
    });

    //cancel the event
    return false;
});
Run Code Online (Sandbox Code Playgroud)

发生错误时它可以正常工作,但我不知道如何实现成功案例.

我对其他选择开放了.

Dar*_*rov 29

如果您要在成功动作中重定向,为什么使用AJAX?AJAX的目的是仅刷新站点的一部分而不重新加载整个页面.如果在成功动作中你将重定向,那将完全击败你从AJAX获得的所有目的和好处.但是因为你问这里你能做什么:

[Authorize]
public ActionResult CreateUser(string username)
{
    ...
    if (Request.IsAjaxRequest())
    {
        return Json(new { redirectToUrl = Url.Action("Index") });
    }
    return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)

然后:

success: function(data, textStatus, xhr) {
    window.location.href = data.redirectToUrl;
},
Run Code Online (Sandbox Code Playgroud)

  • @Daniel,出现问题的情况不是典型的用例.可以预见它并将其考虑在内,但将其视为特殊的东西,这种情况不会经常发生或者至少不会发生.如果您认为存在大量错误,则需要修复代码.所以更好的方法是使用带有简单输入字段的简单HTML表单,它只是简单地发布到一个简单的控制器操作,它试图做它必须做的任何事情,如果成功,它会重定向,如果它失败,你就会向模型状态添加错误,渲染相同的视图.很基本的东西. (2认同)