ASP.NET MVC Fluent Validation 不适用于视图模型 属性 的客户端,这是另一种 class

ASP.NET MVC Fluent Validation doesn't work on the client side for view model's property which is another type of class

我有一个使用 Fluent Validation 的 ASP.NET MVC 应用程序。基本上有一个视图模型 Book 上面有一个作者作为 属性,比如:

class Book {
    string Title { get; set; }
    Author Author { get; set; }
    ...
}

class Author {
    string Name { get; set; }
    ...
}

在视图中有一个用于 Book.Author.Name 的字段。

@Html.EditorFor(m => m.Author.Name)

像这样为 Book 视图模型设置了 Fluent Validation 规则

RuleFor(book => book.Author.Name).NotEmpty();

然后我发现不会为客户端的 Book.Author.Name 字段触发此验证。检查字段的 HTML 标记时,我发现没有生成任何验证数据属性。似乎 Fluent Validation 无法正确处理多级结构以生成客户端验证标记。但是在它被回发到服务器之后,服务器端验证会按预期针对该字段触发。我怎样才能在客户端触发验证?

最终为了解决这个问题,我不得不为作者class创建一个自定义编辑器模板,并且作者 class 的 单独的 Fluent Validator 以及作者 class 属性所需的所有规则。这种方法在这种情况下非常有效。这次可以按预期触发客户端验证,服务器端也是如此。

顺便说一下,我还尝试创建一个 部分视图 而不是作者 class 的自定义编辑器模板。可以触发客户端验证,但在 post 返回后,部分视图无法绑定到控制器操作方法的 Book.Author