我正在尝试对通过 WebApi 返回的对象执行客户端验证。我通过 webapi 将实体发送到我的实体编辑屏幕。我使用敲除将对象绑定到字段。
我已经有一个处理所有服务器端验证的操作过滤器。如何在不必复制域模型数据注释的情况下合并客户端验证?
我正在尝试对通过 WebApi 返回的对象执行客户端验证。我通过 webapi 将实体发送到我的实体编辑屏幕。我使用敲除将对象绑定到字段。
我已经有一个处理所有服务器端验证的操作过滤器。如何在不必复制域模型数据注释的情况下合并客户端验证?
使用 WebApi,您需要一些“粘合”代码来将模型验证失败返回的错误连接到客户端验证器。
function extractErrors(jqXhr, validator) {
var data = JSON.parse(jqXhr.responseText), // parse the response into a JavaScript object
errors = {};
$.each(data.ModelState, function (key, value) {
var pieces = key.split('.');
key = pieces[pieces.length - 1];
errors[key] = value
});
validator.showErrors(errors); // show the errors using the validator object
}
在模型上,照常注释:
[Required]
[Display(Name = "Group Name")]
public string Name { get; set; }
在视图中,添加 ValidationMessageFor 标签:
@Html.EditorFor(m => m.Name)
@Html.ValidationMessageFor(m => m.Name)
当我创建我的 HTTP API 时,我将模型对象(DTO、请求模型等)放入一个单独的程序集中,我可以为 .NET 客户端分发它。
考虑以下类:
public abstract class UserUpdateRequestModel {
[Required]
[StringLength(50)]
public string Name { get; set; }
[Required]
[EmailAddress]
[StringLength(320)]
public string Email { get; set; }
}
这是我在我的 API 中使用的:
public UserDto PutUser(Guid key, UserUpdateRequestModel requestModel) {
// Do something here
}
例如,您可以在 ASP.NET MVC 客户端应用程序中使用相同的模型来生成带有验证data-
属性的 HTML 输入,因为 ASP.NET MVC 有一种基于数据注释验证属性生成这些输入的方法。