2009-10-20 48 views
1

我正在使用AjaxSubmit发布表单,并且使用XVal(RuleException方式)完成了服务器端验证。我没有使用try/catch方法将错误添加到模型然后发送到查看。相反 - 我想使用HandleError属性和OnException,我将这些错误添加到Model中。主要问题是如何将这些错误作为Ajax调用的结果?如何在AjaxSubmit中获取模型错误?

回答

0

现在还没有很好的解决方案。正确地做到这一点需要客户端验证框架(因为要显示错误,需要动态更改HTML页面),直到最近,ASP.NET MVC还没有这样做。但是,ASP.NET MVC 2 Preview 2引入了客户端验证,因此可以很快推测可能会在框架中构建一些内容。

与此同时,HandleErrorAttribute不会帮助你。 HandleErrorAttribute只知道如何重定向到一个错误页面,这通常不是你想要做的,即使是一个“正常的”POST,也不是一个AJAX的帖子,而是响应服务器端的验证错误。

真有你需要处理两种不同的情况:

  1. 验证错误不是灾难性的故障;他们只是不好的用户数据,你应该期待。您只需要将信息返回到页面,以便可以标记页面以告诉用户如何修复其数据。
  2. 您还需要处理灾难性故障,例如意外的异常。这与HandleErrorAttribute的作用类似,只要您可以向用户显示消息,但不一定会将该消息与页面上的特定字段进行匹配。

要处理错误的第一个场景,您需要将模型状态包装到可在JavaScript代码中解析的对象中; JSON在这里显然是合适的。然后,您需要在解析此对象并标记表单域的客户端上拥有JavaScript代码。如果您绑定到现有的客户端验证框架中,该框架已经包含用于标记表单域的代码,这会更容易。

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

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

+0

感谢您的详细回复。我真的很感激。 – sajoshi 2009-10-20 13:35:51