【发布时间】:2012-12-06 09:50:17
【问题描述】:
我正在尝试对通过 WebApi 返回的对象执行客户端验证。我通过 webapi 将实体发送到我的实体编辑屏幕。我使用敲除将对象绑定到字段。
我已经有一个处理所有服务器端验证的操作过滤器。 如何在不必复制域模型数据注释的情况下合并客户端验证?
【问题讨论】:
标签: asp.net-mvc entity-framework validation asp.net-web-api
我正在尝试对通过 WebApi 返回的对象执行客户端验证。我通过 webapi 将实体发送到我的实体编辑屏幕。我使用敲除将对象绑定到字段。
我已经有一个处理所有服务器端验证的操作过滤器。 如何在不必复制域模型数据注释的情况下合并客户端验证?
【问题讨论】:
标签: asp.net-mvc entity-framework validation asp.net-web-api
使用 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 有一种基于数据注释验证属性生成这些输入的方法。
【讨论】:
TextBoxFor html 辅助方法。看看:asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/…