7

我正在尝试对通过 WebApi 返回的对象执行客户端验证。我通过 webapi 将实体发送到我的实体编辑屏幕。我使用敲除将对象绑定到字段。

我已经有一个处理所有服务器端验证的操作过滤器。如何在不必复制域模型数据注释的情况下合并客户端验证?

4

2 回答 2

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)
于 2013-05-03T18:04:24.177 回答
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 有一种基于数据注释验证属性生成这些输入的方法。

于 2012-12-20T16:04:20.003 回答