使用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="">
我错过了什么?
答案 0 :(得分:4)
如果您需要对子对象中的每个属性进行验证,那么可能会有点草率。我建议他们在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());
}
}
这应该指向正确的方向!
答案 1 :(得分:2)
我已经遇到了像“jrummel”一样的问题!!!
如果我使用SetValidator为我的嵌套ViewModel对象定义Validator,则MVC EditorFor Method不会呈现任何data-val *属性。所以没有客户端验证确实有效......
但是每个其他属性(不嵌套的嵌套viewModelType)都能很好地工作。输入具有data-val *属性。 - &GT; WTF?
在我找到http://www.paraesthesia.com/archive/2013/04/17/fluentvalidation-and-mvc-from-server-to-client.aspx之后我确实理解了验证机制是如何工作的,我意识到我在MyNestedViewModelType类上缺少[Validator(typeof(MyNestedViewModelType))]
属性。
希望这有助于其他人节省时间; - )