在ASP.NET MVC 2上绕过数据批注验证
我想知道是否有可能绕过一个使用数据注释的属性的验证。由于我在多个页面上使用该模型,因此在某些页面中需要检查,但在其他页面中不需要检查,因此我希望忽略它在ASP.NET MVC 2上绕过数据批注验证,asp.net,asp.net-mvc,asp.net-mvc-2,data-annotations,Asp.net,Asp.net Mvc,Asp.net Mvc 2,Data Annotations,我想知道是否有可能绕过一个使用数据注释的属性的验证。由于我在多个页面上使用该模型,因此在某些页面中需要检查,但在其他页面中不需要检查,因此我希望忽略它 萨克斯 我认为这在数据注释中是不可能的。我知道Microsoft企业库验证应用程序块的概念是将规则集用于组验证。这允许您在多个规则集上验证对象,例如默认规则集和某些页面上的扩展规则集。数据注释没有类似规则集的内容 以下是使用VAB的示例: public class Subscriber { [NotNullValidator] [
萨克斯 我认为这在数据注释中是不可能的。我知道Microsoft企业库验证应用程序块的概念是将规则集用于组验证。这允许您在多个规则集上验证对象,例如默认规则集和某些页面上的扩展规则集。数据注释没有类似规则集的内容 以下是使用VAB的示例:
public class Subscriber
{
[NotNullValidator]
[StringLengthValidator(1,200)]
public string Name { get; set; }
[NotNullValidator(Ruleset="Persistence")]
[EmailAddressValidator]
public string EmailAddress { get; set; }
}
您可以使用FluentValidation,它用作外部验证器类。在本例中,您将为每个场景实现不同的验证器类 示例:
using FluentValidation;
public class CustomerValidator: AbstractValidator<Customer> {
public CustomerValidator() {
RuleFor(customer => customer.Surname).NotEmpty();
RuleFor(customer => customer.Forename).NotEmpty()
.WithMessage("Please specify a first name");
}
}
public class CustomerValidator2: AbstractValidator<Customer> {
public CustomerValidator() {
RuleFor(customer => customer.Surname).NotEmpty();
}
}
Customer customer = new Customer();
CustomerValidator validator = new CustomerValidator();
ValidationResult results = validator.Validate(customer);
CustomerValidator2 validator2 = new CustomerValidator2();
ValidationResult results2 = validator2.Validate(customer);
results would have 2 validation errors
results2 would have 1 validation error for the same customer
使用FluentValidation;
公共类CustomerValidator:AbstractValidator{
公共CustomerValidator(){
RuleFor(customer=>customer.姓氏).NotEmpty();
RuleFor(customer=>customer.Forename).NotEmpty()
.WithMessage(“请指定名字”);
}
}
公共类CustomerValidator2:AbstractValidator{
公共CustomerValidator(){
RuleFor(customer=>customer.姓氏).NotEmpty();
}
}
客户=新客户();
CustomerValidator validator=新CustomerValidator();
ValidationResult=validator.Validate(客户);
CustomerValidator2 validator2=新CustomerValidator2();
ValidationResult results2=validator2.验证(客户);
结果将有2个验证错误
结果2对于同一客户将有1个验证错误
不久前,我问了一些类似的问题——简短的回答是否定的。我最后不得不为它编写自己的验证系统。你也许可以编写自己的模型活页夹来处理它,但我从来没有抽出时间来处理它。。。。这就是为什么他们说应该为每个视图创建单独的视图模型;)