关于asp.net mvc:如何在AjaxSubmit中获取模型错误?

How to get Model errors in AjaxSubmit?

我正在使用AjaxSubmit发布表单,并且有使用XVal(RuleException方法)完成的服务器端验证。我没有使用Try/Catch方法向模型添加错误,然后发送到视图。相反-我想使用handleError属性,在OnException中,我将向模型添加错误。主要的问题是如何在Ajax调用中得到这些错误?


目前还没有一个内置的解决方案。正确地执行此操作需要客户端验证框架(因为要显示错误,需要动态更改HTML页),而且直到最近,ASP.NET MVC还没有这样做。然而,ASP.NET MVC 2 Preview 2引入了客户端验证,因此可以合理地假定框架中很快会有一些东西被构建。

然而,与此同时,handleerrrorattribute对您没有帮助。handleErrorAttribute只知道如何重定向到错误页,这通常不是您在响应服务器端验证错误时要做的事情,即使是在"普通"日志中,也不是在Ajax日志中。

您需要处理两种不同的场景:

  • 验证错误不是灾难性的失败;它们只是糟糕的用户数据,您应该预料到。您只需要将信息返回到页面,这样就可以标记页面,告诉用户如何修复其数据。
  • 您还需要处理灾难性故障,如意外的异常。这类似于handleErrorAttribute所做的,只要您可以向用户显示消息,但您不一定要将该消息与页面上的特定字段匹配起来。
  • 要处理第一个错误场景,您需要将模型状态包装成一个对象,该对象将在JavaScript代码中可分析;JSON显然适合这里。然后,您需要在客户端使用JavaScript代码来解析这个对象并标记表单字段。如果您连接到一个现有的客户端验证框架,这个框架已经包含用于标记表单字段的代码,那么这就更容易了。

    要处理第二类错误,可以扩展handleErrorAttribute,以便在发生灾难性故障时提供JSON而不是HTML。同样,您需要编写在发生故障时执行的javascript代码——jquery的全局ajaxError事件在这里很有用——它检测您创建的结构化错误信息,并向用户显示某种有用的消息。

    如果所有这些听起来都有点牵扯进来,那么,这就是为什么等待和查看MVC 2最终发布时将内置什么更有意义的原因。