我正在尝试对通过WebApi返回的对象执行客户端验证。我通过webapi将实体发送到我的实体编辑屏幕。我使用knockout将对象绑定到字段。
我已经有一个处理所有服务器端验证的动作过滤器。 如何在不必复制域模型数据注释的情况下合并客户端验证?
答案 0 :(得分:1)
使用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)
答案 1 :(得分:0)
当我创建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有一种基于数据注释验证属性生成这些属性的方法。