tug*_*erk 5 .net asp.net validation data-annotations .net-4.5
使用.NET Framework 4.5,ValidationAttribute该类现在具有一个Boolean名为的新属性RequiresValidationContext.
我一直在挖掘很长时间,我找不到这个属性的用途.这个的difault值是false,我最初认为如果将其设置为false,则调用以下方法:
public virtual bool IsValid(object value)
Run Code Online (Sandbox Code Playgroud)
如果设置为true,则调用下面的一个:
protected virtual ValidationResult IsValid(object value, ValidationContext validationContext);
Run Code Online (Sandbox Code Playgroud)
事实证明,无论你设置什么,总是调用IsValid返回的方法ValidationResult.
为了爱上帝,这个RequiresValidationContext属性是什么?
RequiresValidationContext对于CompareAttribute或自定义属性等验证器非常有用.
ValidationAttribute是抽象类,它取决于您的实现意味着什么.例如,我有Validation Attribute,只有当另一个属性有一些值时才检查是否需要某些字段.
如果调用IsValid(对象值),它依赖于Attribute实现.例如:
[Display(Name = "Your employer")]
[LoginTypeRequired(LoginType = LoginType.Employee, ErrorMessage = "Employee must fill in Employer.")]
public int? Employer { get; set; }
Run Code Online (Sandbox Code Playgroud)
属性代码:
public class LoginTypeRequiredAttribute : RequiredAttribute
{
public override bool RequiresValidationContext
{
get {return true;}
}
public LoginType LoginType { get; set; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
RegisterModel model = (RegisterModel)validationContext.ObjectInstance;
if (LoginType != model.LoginType)
return null;
else
return base.IsValid(value, validationContext);
}
public override bool IsValid(object value)
{
return base.IsValid(value);
}
}
Run Code Online (Sandbox Code Playgroud)
第一个带有两个参数的方法使用IsValid(对象值,ValidationContext validationContext)来完成上下文的工作.如果一切正常,它会调用基础并且内部.NET 4.5堆栈是:
LinqDataModel.dll!LinqDataModel.Models.LoginTypeRequiredAttribute.IsValid(object value)第92行C#System.ComponentModel.DataAnnotations.dll!System.ComponentModel.DataAnnotations.ValidationAttribute.IsValid(object value,System.ComponentModel.DataAnnotations.ValidationContext validationContext)+ 0x74字节
LinqDataModel.dll!LinqDataModel.Models.LoginTypeRequiredAttribute.IsValid(object value,System.ComponentModel.DataAnnotations.ValidationContext validationContext)第87行+ 0xe字节C#System.ComponentModel.DataAnnotations.dll!System.ComponentModel.DataAnnotations.ValidationAttribute.GetValidationResult(object value ,System.ComponentModel.DataAnnotations.ValidationContext validationContext)+ 0x1e bytes
System.Web.Mvc.dll!System.Web.Mvc.DataAnnotationsModelValidator.Validate.MoveNext()+ 0xa2 bytes System.Web.Mvc.dll!System.Web.Mvc .ModelValidator.CompositeModelValidator.Validate.MoveNext()+ 0x138 bytes System.Web.Mvc.dll!System.Web.Mvc.DefaultModelBinder.OnModelUpdated(System.Web.Mvc.ControllerContext controllerContext,System.Web.Mvc.ModelBindingContext bindingContext)+ 0x212字节
因此,您可以看到案例IsValid(对象值,ValidationContext validationContext)如果不覆盖则调用IsValid(对象值).
但是你仍然有机会覆盖IsValid(对象值,ValidationContext validationContext)而不是调用基数.
| 归档时间: |
|
| 查看次数: |
2062 次 |
| 最近记录: |