【问题标题】:Kendo Upload Control, Pass custom error message back to viewKendo Upload Control,将自定义错误消息传回查看
【发布时间】:2014-02-20 08:10:25
【问题描述】:

我正在使用 ASP.NET MVC3、Kendo UI 和 Jquery。当上传文件的处理未通过我们拥有的验证规则时,我正在尝试将错误消息传递回视图。

这是我认为的上传控件:

@(Html.Kendo().Upload()
  .Name("files")
  .Async(a => a
  .Save("SaveForm", "Home")
  .Remove("RemoveForm", "Home")
  .AutoUpload(true))
  .Events(events => events
  .Success("onSuccess")
  .Error("onUploadError")
  .Select("onSelect")
  ))

以下是控制器中 SaveForm 方法的相关部分:

try
{
      FieldDefinitions = ProcessPDFFile(file.FileName);
}
catch (InvalidDataException ex){
    List<String> errors = new List<String>();
    errors.Add(ex.Message);
    Response.StatusCode = 500;
    Response.TrySkipIisCustomErrors = true;

    //return Json(new { success = false, statusText = "error error" }, "text/plain");
    //ModelState.AddModelError("pp", ex.Message);
    //var result = ModelState.ToDataSourceResult();
    //return Json(errors, JsonRequestBehavior.AllowGet);
    //return Json(new { status = "OK" }, "text/plain");
    //return Json(String.Concat(errors.ToArray()));
    //return Json(new AjaxResult(false, ex.Message, errors ));
}

这是我的 Jquery 错误函数:

function onUploadError(e)
{
    alert(e.message);
}

在我的控制器中,ex.Message 是一个自定义错误消息,我想将它传递回视图以进行显示。通过查看控制器中注释掉的代码行,您可以看到我尝试将其传递回来的所有不同变体。

jquery 错误函数正在执行。唯一的问题是我似乎无法在 jquery 中获得我的自定义错误消息。

在评估 e.XMLHTTPRequest 时

它有以下内容:

responseText = "尝试获取服务器响应时出错" 状态 = 500 StatusText = "错误"

那么如何将我的自定义错误消息放入 XMLHTTPRequest 的上述元素之一?我认为我的控制器上的返回需要以某种方式进行修改。

【问题讨论】:

    标签: jquery asp.net-mvc asp.net-mvc-3 kendo-ui


    【解决方案1】:

    解决方法很简单,一看就知道,但是上面的documentation 不完整。我们知道我们应该返回一个空字符串来表示成功。我还看到(但现在找不到)建议您可以交替返回 JSON 对象而不是 string.Empty 的文档,这也意味着成功。 JSON 对象或字符串以外的任何内容。Empty 表示错误。但是我们该如何处理呢?

    发送到Error event handler 的参数仍然具有基本组件:e.files、e.operation 和 e.XMLHttpRequest。解决方案是在控制器的方法中返回一个普通字符串,它变成原始的 XMLHttpRequest.responseText。它不是 JSON,所以不要尝试解析为 JSON。

    控制器:

        public ActionResult Index(IEnumerable<HttpPostedFileBase> files)
        {
            try
            {
                // … do something
                return Content(string.Empty);
            }
            catch (Exception ex)
            {
                // simply send the error message to Content
                return Content(ex.Message);
            }
        }
    

    JavaScript 处理程序:

        function onError(e) {
            // invalid because the responseText is a raw string, not JSON
            //var err = $.parseJSON(e.XMLHttpRequest.responseText);
            var err = e.XMLHttpRequest.responseText;
            alert(err);
        };
    

    【讨论】:

    • 我可以通过这种方式显示错误,但控制器仍将其视为有效上传。您知道如何防止默认行为吗? e.preventDefault() 没用。
    • e.stopPropagation() 可能是正确的回应。但是,我会尝试在自定义错误函数的末尾添加 return false,因为它同时处理 stopPropagation 和 preventDefault。你可以试试两者,看看有什么效果。
    【解决方案2】:

    要处理为无效上传,不得不更改http返回码。

    在catch子句中:

    HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
    

    【讨论】:

      【解决方案3】:

      Sfuqua 的回答(谢谢!)澄清并为我工作:

      function onError(e) {
          var err = e.XMLHttpRequest.responseText;
          alert(err); 
          e.stopPropagation();
          return false;
      };
      

      在这种情况下,onUploadSuccess() 没有被触发。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多