- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 .NET Framework 4.5,ValidationAttribute
类现在有一个名为 RequiresValidationContext
的新 Boolean
属性.
我已经挖了很长时间了,但找不到这个属性的用途。它的默认值为 false,我最初认为如果将其设置为 false,则会调用以下方法:
public virtual bool IsValid(object value)
如果它设置为 true,则调用以下函数:
protected virtual ValidationResult IsValid(object value, ValidationContext validationContext);
事实证明,无论您设置什么,总是会调用返回 ValidationResult
的 IsValid
方法。
老天爷啊,这个 RequiresValidationContext
属性有什么用?
最佳答案
RequiresValidationContext 对于像 CompareAttribute 或自定义属性这样的验证器很有用。
ValidationAttribute 是抽象类,它取决于您的意思是什么实现。例如,我有验证属性,仅当另一个属性具有某些值时才检查某些字段是否是必需的。
IsValid(object value)是否被调用取决于属性的实现。例如:
[Display(Name = "Your employer")]
[LoginTypeRequired(LoginType = LoginType.Employee, ErrorMessage = "Employee must fill in Employer.")]
public int? Employer { get; set; }
属性代码:
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);
}
}
第一个带有两个参数的方法使用 IsValid(object value, ValidationContext validContext) 来完成上下文的工作。如果一切正常,它将调用基础,内部 .NET 4.5 堆栈为:
LinqDataModel.dll!LinqDataModel.Models.LoginTypeRequiredAttribute.IsValid(object value) Line 92 C# System.ComponentModel.DataAnnotations.dll!System.ComponentModel.DataAnnotations.ValidationAttribute.IsValid(object value, System.ComponentModel.DataAnnotations.ValidationContext validationContext) + 0x74 bytes
LinqDataModel.dll!LinqDataModel.Models.LoginTypeRequiredAttribute.IsValid(object value, System.ComponentModel.DataAnnotations.ValidationContext validationContext) Line 87 + 0xe bytes 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 bytes因此,您可以看到如果不重写,则 IsValid(object value, ValidationContext validationContext) 正在调用 IsValid(object value)。
但是您仍然有机会重写 IsValid(object value, ValidationContext validContext) 并且不调用基类。
关于asp.net - ValidationAttribute 类的 RequiresValidationContext 属性有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12585267/
我正在尝试编写自己的 ValidationAttribute,我想将我的类的参数值传递给 ValidationAttribute。很简单,如果 bool 属性为 true,则顶部带有 Validati
我正在尝试编写自己的 ValidationAttribute,我想将我的类的参数值传递给 ValidationAttribute。很简单,如果 bool 属性为 true,则顶部带有 Validati
我有一个自定义的 ValidationAttribute,它检查另一个用户是否已经存在。为此,它需要访问我的数据访问层,一个由 Unity 注入(inject)我的 Controller 的实例 我如
我用以下内容装饰了一个类: [Required(ErrorMessage = "Price is required.")] public decimal Price { get; set; } 但是当
我创建了一个派生自 ValidationAttribute 的自定义验证器。我的理解是,它将生成足够的元数据供客户端脚本自动验证(使用 jquery.validate)。自定义验证器在服务器端工作正常
我有一个名为 [DateOfBirth] 的自定义 MVC 验证属性 - 它在模型中的使用如下: [DateOfBirth("DOBMinimumAgeValidation", 18, 100, Er
我的模型包含一些成员: public class Address { public Street { get; set;} public City { get; set; } pub
我有这个用于验证集合的自定义验证属性。我需要调整它以使用 IEnumerable。我尝试使该属性成为通用属性,但您不能拥有通用属性。 [AttributeUsage(AttributeTargets.
我有这样一个模型: [IsValidInput] public class Input { //different properties } 使用这样的自定义验证属性: [AttributeU
public class UniqueNameAttribute : ValidationAttribute { private const string UniqueNameViolatio
我尝试创建自定义 ValidationAttribute: public class RollType : ValidationAttribute { public override bool
我创建了一个自定义的 ValidationAttribute 类来检查我的应用程序中某个人的年龄: public class MinimumAgeAttribute : ValidationAttri
我构建了一个简单的日期检查来验证表单中的日期是否小于当前日期。 ValidationAttribute public class DateIsValidAttribute : ValidationAt
我在测试自定义验证属性时遇到了一些麻烦。由于方法签名是 protected当我调用 IsValid在我的单元测试中,我无法传入 Mock对象,它正在调用基 virtual bool IsValid(o
我在尝试确定哪个 ValidationAttribute 返回了特定的 ModelError 时遇到了问题。我的网络 API 中有一个端点,它采用以下模型; public class MyClass
当我实现从 ValidationAttribute 类继承的自定义属性时,我总是覆盖 bool IsValid(object value)忽略原型(prototype)为 ValidationResu
我创建了一个在服务器和客户端之间共享的 ValidationAttribute。为了让验证属性在数据助手类中被引用时正确生成给客户端,我必须非常具体地说明我是如何构建它的。 我遇到的问题是,由于某种原
在 ASP.NET MVC 4 应用程序中,LocalPasswordModel 类(在 Models\AccountModels.cs 中)如下所示: public class LocalPassw
MVC2 附带了一个名为“PropertiesMustMatchAttribute”的验证属性的很好示例,它将比较两个字段以查看它们是否匹配。该属性的使用如下所示: [PropertiesMustMa
使用 .NET Framework 4.5,ValidationAttribute类现在有一个名为 RequiresValidationContext 的新 Boolean 属性. 我已经挖了很长时间
我是一名优秀的程序员,十分优秀!