Kendo上传控件,将自定义错误消息传递回查看

car*_*rlg 11 asp.net-mvc jquery asp.net-mvc-3 kendo-ui

我正在使用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")
  ))
Run Code Online (Sandbox Code Playgroud)

以下是控制器中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 ));
}
Run Code Online (Sandbox Code Playgroud)

这是我的Jquery错误函数:

function onUploadError(e)
{
    alert(e.message);
}
Run Code Online (Sandbox Code Playgroud)

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

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

在评估e.XMLHTTPRequest时

它有以下几点:

responseText ="尝试获取服务器响应时出错"Status = 500 StatusText ="error"

那么如何将我的自定义错误消息添加到XMLHTTPRequest的上述元素之一?我假设我的控制器上的返回需要以某种方式进行修改.

sfu*_*qua 26

一旦你看到它,解决方案很简单,但是关于这个的文档并不完整.我们知道我们应该返回一个空字符串来表示成功.我也看到了 - 但现在找不到 - 文档建议你可以交替返回一个JSON对象而不是string.Empty,这也意味着成功.除JSON对象或string.Empty之外的任何内容都表示错误.但是我们如何处理呢?

发送到Error事件处理程序的参数仍然具有基本组件: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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

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);
    };
Run Code Online (Sandbox Code Playgroud)