asp.net-mvc - 不会为嵌套的属性规则呈现不显眼的客户端验证数据属性

标签 asp.net-mvc validation asp.net-mvc-4 fluentvalidation

使用 FluentValidation 4.4,以下规则在输入字段上发出正确的不显眼的验证数据属性:

RuleFor(e => e.PrimaryContact).NotEmpty();

呈现以下html:
<input class="text-box single-line k-textbox input-validation-error" 
       data-val="true" data-val-required="'Primary Contact' should not be empty." 
       id="PrimaryContact" name="PrimaryContact" type="text" value="">

但是,具有嵌套属性的规则不会发出任何验证数据属性:
RuleFor(e => e.Company.Name).NotEmpty();

呈现以下html:
 <input class="text-box single-line k-textbox" id="Company_Name" name="Company.Name" type="text" value="">

我错过了什么?

最佳答案

在您需要验证子对象中的每个属性的情况下,这可能会有点草率。我建议做他们在 documentation here 上所做的事情.

[Validator(typeof(ParentObjectValidator))]
public class ParentObject 
{
    public string PrimaryContact {get;set;}
    public Company Company {get;set;}
}

[Validator(typeof(CompanyValidator))] // This one is required!
                                      // Otherwise no data-val-required will be assigned
public class Company
{
    public string Name {get;set;}
}

为子对象设置验证器。
public class CompanyValidator : AbstractValidator<Company> {
    public CompanyValidator() {
      RuleFor(company => company.Name).NotEmpty();
      //etc
    }
}

然后,在您的父对象中,您可以像这样将该验证器设置为子对象。
public class ParentObjectValidator : AbstractValidator<ParentObject> {
  public ParentObjectValidator() {
    RuleFor(e => e.PrimaryContact).NotEmpty();
    RuleFor(e => e.Company).SetValidator(new CompanyValidator());
  }
}

这应该为您指明正确的方向!

关于asp.net-mvc - 不会为嵌套的属性规则呈现不显眼的客户端验证数据属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17238544/

相关文章:

asp.net-mvc - 在 mvc 中的应用程序的整个生命周期中保持变量

c# - MVC 多次提交表单

C - 在函数中使用未声明的标识符。 CS50

asp.net-mvc - RazorPDF将pdf文件保存到MVC4中的服务器目录

c# - Web API 路由被忽略

c# - MVC html.raw 生成 "An error occurred while processing your request"

c# - Mvc asp.net和n层架构

javascript - jQuery Mask 插件中的时间验证 24 小时格式

php - Laravel - 错误消息未转换为实际错误消息,以 "validation."开头

asp.net-mvc-4 - 如何在 MVC 中触发事件