Asp.net mvc 4 如何将服务器端数据注释与客户端编程(如jsRender)结合使用

Asp.net mvc 4 如何将服务器端数据注释与客户端编程(如jsRender)结合使用,asp.net-mvc-4,data-annotations,asp.net-web-api,jsrender,Asp.net Mvc 4,Data Annotations,Asp.net Web Api,Jsrender,在MVC4中使用WebAPI之前,在jsRender变成beta之前,我们使用服务器端编程生成表单。也就是说,在视图模型上添加数据注释,然后生成一个包含大量@Html.EditorFor和@Html.LabelFor的表单。(如果你是MVC程序员,你知道我的意思。)那么jQuery验证将帮助我们在客户端进行数据验证,而DataAnnotation属性则通过检查Model.IsValid在服务器端完成这项工作。一切都很好 现在我们有了WebAPI。大多数示例都是使用Javascript调用Ajax

在MVC4中使用WebAPI之前,在jsRender变成beta之前,我们使用服务器端编程生成表单。也就是说,在视图模型上添加数据注释,然后生成一个包含大量
@Html.EditorFor
@Html.LabelFor
的表单。(如果你是MVC程序员,你知道我的意思。)那么jQuery验证将帮助我们在客户端进行数据验证,而DataAnnotation属性则通过检查
Model.IsValid
在服务器端完成这项工作。一切都很好

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

我喜欢使用Ajax调用来避免不必要的完整页面呈现。但主要的困难是,由于表单是作为模板准备的,它绑定到客户端的数据,因此无法将DataAnnotation等服务器端技术与jQuery验证结合起来。我们无法使用
@Html.EditorFor
生成模板。看起来我们失去了MVC3之前的许多巨大优势

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

如果我们只能在客户端完成所有工作,那么如何使用jQuery验证呢?我们是否手动添加那些
数据值xxx
标记


感谢您的建议。

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

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

  • 服务器端。将模型验证错误转换为JSON的自定义
    ActionFilterAttribute
  • 客户端。解释验证错误的一些JavaScript技巧
每次对服务器进行REST调用时,我都会在返回时检查HTTP状态代码
200
表示成功,应用程序正常运行<代码>400表示请求不正确,这意味着返回了一条或多条验证消息

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


我添加了一个新的
datavalserver
属性,该属性总是使设置它的输入元素无效。我从服务器上获得的数据告诉我要放置属性的元素。该属性的值是同样来自服务器的错误消息。之后,我只需启动客户端验证,它将解析表单,使表单无效,并查看相应的消息。

@Martin Devillers有人在这里这么做了:

令人印象深刻。您似乎指向了正确的方向。但这听起来确实需要做很多工作!您是否必须为每种类型的数据创建一个单独的
EditorTemplate
。我已经删除了关于自定义编辑器模板的部分。这一部分只用于自动生成敲除绑定,与验证无关。是的,开发这一切需要一些工作,但在我的项目中,我们讨论的是100多个API,它们都可能会或不会抛出验证错误。所以,对于我的项目来说,努力是有回报的。客户端架构大约有200行代码,而服务器端ActionFilterAttribute大约有30行代码。请不要只发布一个链接!