【问题标题】:Ajax BeginForm - OnFailure return error messageAjax BeginForm - OnFailure 返回错误信息
【发布时间】:2016-10-21 13:49:19
【问题描述】:

我正在使用 Ajax.BeginForm 来调用我的应用程序来运行一些代码。出错时,我想返回我将创建的自定义错误消息。

但是到目前为止我还没有做到这一点。这就是我所拥有的:

控制器:

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<JsonResult> Edit(UserViewModel model) {
            Response.StatusCode = 500;
            return Json(new { error = "Broken" });
        }

Ajax.BeginForm:

@using (Ajax.BeginForm("Edit", "User", new AjaxOptions { HttpMethod = "POST", OnSuccess = "window.location.reload();", OnFailure = "AjaxFailed(error);" }, new { @class = "form-horizontal", role = "form", @id = "EditForm" })) {
}

Javascript:

function AjaxFailed(error) {
    debugger
    $(".ErrorBox").prop('hidden', false);
    $('.ModalErrorText').text("An error occured, please review the data and try again.");
}

我原以为 BeginForm 会捕捉到我返回的错误并将其传递给 Javascript,但事实并非如此。谁能帮我将错误消息返回给我 Javascript?

谢谢

【问题讨论】:

  • 在不处理 onSuccess 中的故障的情况下找出正确的方法来做这件事有什么运气吗?

标签: javascript c# ajax error-handling


【解决方案1】:

我只使用了 onSuccess 并删除了 StatusCodeonFailure。希望它也有效!

public async Task<JsonResult> Edit(UserViewModel model) {
        if(success)
            return Json(new { votes = "Success" }, JsonRequestBehavior.AllowGet);
        else
            return Json(new { error = "Broken" });
}

脚本

function onSuccess(result) {
    if (result.error) {
          alert(result.error); //do error
    } 
    else {
         alert(result.votes); //do success 
    }
}

【讨论】:

  • 感谢您的回复,我想过这样做,但我觉得它有点欺骗。干杯!
  • 很高兴听到它有效!顺便说一句,您可以选择正确的答案吗? :)
  • 我选择您的答案作为答案,因为当时它是正确的。但我认为正确的做法是返回一个 ActionResult ,因为您可以通过一个动作结果返回一个 JsonResult 。要返回错误,您需要将状态代码设置为浏览器识别为失败的状态代码
猜你喜欢
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
  • 2023-04-03
相关资源
最近更新 更多