- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写自己的 ValidationAttribute
,我想将我的类的参数值传递给 ValidationAttribute
。很简单,如果 bool 属性为 true
,则顶部带有 ValidationAttribute
的属性不应为 null 或为空。
我的类(class):
public class Test
{
public bool Damage { get; set; }
[CheckForNullOrEmpty(Damage)]
public string DamageText { get; set; }
...
}
我的属性:
public class CheckForNullOrEmpty: ValidationAttribute
{
private readonly bool _damage;
public RequiredForWanrnleuchte(bool damage)
{
_damage = damage;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
string damageText = validationContext.ObjectType.GetProperty(validationContext.MemberName).GetValue(validationContext.ObjectInstance).ToString();
if (_damage == true && string.IsNullOrEmpty(damageText))
return new ValidationResult(ErrorMessage);
return ValidationResult.Success;
}
}
但是,我不能像那样简单地将类内的属性传递给 ValidationAttribute。传递该属性值的解决方案是什么?
最佳答案
您应该传递相应属性的名称,而不是将 bool
值传递给 CheckForNullOrEmptyAttribute
;在该属性中,您随后可以从正在验证的对象实例中检索此 bool
值。
下面的 CheckForNullOrEmptyAttribute
可以应用于您的模型,如此处所示。
public class Test
{
public bool Damage { get; set; }
[CheckForNullOrEmpty(nameof(Damage))] // Pass the name of the property.
public string DamageText { get; set; }
}
public class CheckForNullOrEmptyAttribute : ValidationAttribute
{
public CheckForNullOrEmptyAttribute(string propertyName)
{
PropertyName = propertyName;
}
public string PropertyName { get; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var hasValue = !string.IsNullOrEmpty(value as string);
if (hasValue)
{
return ValidationResult.Success;
}
// Retrieve the boolean value.
var isRequired =
Convert.ToBoolean(
validationContext.ObjectInstance
.GetType()
.GetProperty(PropertyName)
.GetValue(validationContext.ObjectInstance)
);
if (isRequired)
{
return new ValidationResult(ErrorMessage);
}
return ValidationResult.Success;
}
}
关于c# - 将类的属性传递给 ValidationAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61922439/
我正在尝试编写自己的 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 属性. 我已经挖了很长时间
我是一名优秀的程序员,十分优秀!