2

在我的 ASP.NET MVC 3 应用程序中,我有一个通过 jQuery 触发的操作AJAX POST request。在这个动作中,我检查了一些带有属性的数据库数据,如果它通过了验证,我返回一个在 jQuery 请求回调中PartialView视图上的 div 内设置的结果。success我想要做的是,如果它没有通过验证,则将用户完全重定向到我的应用程序中的另一个页面。

我知道我可以通过 Javascript 通过将值传递给视图并在那里进行额外检查来做到这一点,但我想知道它是否可以在服务器端完成。

4

2 回答 2

2

在您的控制器操作中,您可以返回 aPartialViewJsonResult指向控制器操作以重定向到:

public ActionResult SomeAction()
{
    if (HasPassedValidation)
    {
         // everything went fine => let's return a partial view
         // that will be updated
         return PartialView();
    }

    // something went wrong with the validation => 
    // we return a JsonResult pointing to the controller
    // action we want to redirect to
    var result = new 
    { 
        redirectTo = Url.Action("SomeOtherAction", "SomeController") 
    };

    return Json(result, JsonRequestBehavior.AllowGet);
}

然后在你的 AJAX 调用测试的成功回调中,在这种情况下你是并采取相应的步骤:

success: function(result) {
    if (result.redirectTo) {
        // the controller action returned a JSON result => there was an error
        // => let's redirect
        window.location.href = result.redirectTo;
    } else {
        // everything went fine => let's update the DOM with the partial
        $('#results').html(result);
    }
}
于 2012-09-24T13:26:36.867 回答
1

MVC 中的 AJAX 表单控件不执行完全重定向。但是,HTML 可以。(虽然这确实意味着你失去了异步行为)。

于 2012-09-24T13:27:17.487 回答