Kendo Upload Control,将自定义错误消息传回查看
Posted
技术标签:
【中文标题】Kendo Upload Control,将自定义错误消息传回查看【英文标题】:Kendo Upload Control, Pass custom error message back to view 【发布时间】: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 的上述元素之一?我认为我的控制器上的返回需要以某种方式进行修改。
【问题讨论】:
【参考方案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() 没有被触发。
【讨论】:
以上是关于Kendo Upload Control,将自定义错误消息传回查看的主要内容,如果未能解决你的问题,请参考以下文章
如何将自定义 RESTful 路由添加到 Rails 应用程序?