如何在AjaxSubmit中获取Model错误?

时间:2009-10-20 12:48:33

标签: asp.net-mvc ajax jquery xval

我正在使用AjaxSubmit发布表单,并且使用XVal(RuleException方式)完成了服务器端验证。我没有使用try / catch方式向Model添加错误然后发送到视图。相反 - 我想使用HandleError attibute,在OnException中我将错误添加到Model。主要问题是如何在Ajax调用中获得这些错误?

1 个答案:

答案 0 :(得分:0)

目前还没有很好的解决方案。正确执行此操作需要客户端验证框架(因为,要显示错误,您需要动态更改HTML页面),直到最近,ASP.NET MVC还没有。但是,ASP.NET MVC 2 Preview 2引入了客户端验证,所以假设很快就可以在框架中构建一些内容是合理的。

但与此同时,HandleErrorAttribute对您没有帮助。 HandleErrorAttribute只知道如何重定向到一个错误页面,这通常不是你想要做的事情,即使使用“正常”的POST,服务器端验证错误,当然也不是AJAX帖子。

您需要处理两种不同的方案:

  1. 验证错误不是灾难性的失败;它们只是糟糕的用户数据,您应该期待它们。您只需要将信息返回到页面,以便可以标记页面以告诉用户如何修复他们的数据。
  2. 您还需要处理灾难性故障,例如意外的异常。这类似于HandleErrorAttribute所做的事情,只要您可以向用户显示消息,但您不一定能将该消息与页面上的特定字段匹配。
  3. 要处理第一个错误场景,您需要将模型状态包装到一个可在JavaScript代码中解析的对象中; JSON显然适合这里。然后,您需要在客户端使用JavaScript代码来解析此对象并标记表单字段。如果您绑定到现有的客户端验证框架(已经包含用于标记表单字段的代码),这将更容易。

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

    如果所有这些听起来有点牵连,那就是,这就是为什么等待并看看MVC 2最终发布时内置的内容会更有意义。