2

在我们在 MVC4 中使用 WebAPI 之前以及在 jsRender 变为 beta 之前,我们使用服务器端编程生成表单。也就是在视图模型上添加Data Annotations,然后生成一个有很多@Html.EditorForand的表单@Html.LabelFor。(如果你是一名 MVC 程序员,你就会明白我的意思。)然后 jQuery 验证将帮助我们在客户端进行数据验证,而 DataAnnotation 属性通过检查Model.IsValid. 一切都很好。

现在我们有了WebAPI. 大多数示例是使用Javascript调用Ajax来WebAPI在服务器和客户端之间传输表单数据(主要是json)的动作。jsRender(或其他类型的模板库)用于呈现数据。

我喜欢进行 Ajax 调用以避免不必要的整页呈现的想法。但主要困难在于,由于表单是作为模板准备的,它绑定到客户端的数据,因此无法将 DataAnnotation 等服务器端技术与 jQuery-validation 结合起来。而且我们无法使用@Html.EditorFor. 看来我们失去了许多以前在 MVC3 中所拥有的巨大好处。

那么,各位专家如何处理呢?您是否完全抛弃了服务器端技术,只在模板中写出所有内容供客户端使用?

如果我们只能在客户端做所有事情,我们如何利用 jQuery 验证?我们是否data-val-xxx手动添加这些标签?

感谢您的任何建议。

4

2 回答 2

1

对 ASP.NET MVC 采用 AJAX 方法并不排除使用 ASP.NET 验证功能。但是,您必须编写自己的服务器端和客户端架构来处理这些场景。基本上,您希望您的 Web API 能够为任何方法抛出验证消息。此外,您希望您的客户端 JavaScript 能够随时处理这些消息。

在我目前正在开发的 ASP.NET MVC + Knockout 应用程序中,我正在这样做。它涉及:

  • 服务器端. ActionFilterAttribute将模型验证错误转换为 JSON的自定义
  • 客户端. 一些 JavaScript 技巧来解释验证错误。

在我对服务器进行的每次 REST 调用中,我都会检查返回时的 HTTP 状态代码。200表示成功,应用程序正常进行。400表示 Bad Request,表示返回了一条或多条验证消息。

在 a 的情况下400,响应的主体包含一个带有所有验证消息的 JSON 数组。这些消息是简单的元组,由输入元素的名称和错误消息组成。

我添加了一个新data-val-server属性,该属性总是使其设置的输入元素无效。我从服务器获得的数据告诉我放置属性的元素。该属性的值是也来自服务器的错误消息。之后,我只需启动客户端验证,它将解析表单、使表单无效并查看适当的消息。

于 2012-08-13T18:46:04.940 回答
0

@Martin Devlers 有人在这里做过:http ://sixgun.wordpress.com/2012/03/28/asp-net-web-api-validation-with-data-annotations/

于 2012-08-27T16:09:23.243 回答