相关疑难解决方法(0)

编写CompareTo DataAnnotation属性

我有一种情况,我想与字段进行比较(例如,确保开始时间在结束时间之前).我正在使用System.ComponentModel.DataAnnotations属性进行验证.

我的第一个想法是这样的:

public enum CompareToOperation
{
    EqualTo,
    LessThan,
    GreaterThan
}

public class CompareToAttribute : ValidationAttribute
{
    CompareToOperation _Operation;
    IComparable _Comparision;

    public CompareToAttribute(CompareToOperation operation, Func<IComparable> comparison)
    {
       _Operation = operation;
       _Comparision = comparison();
    }

    public override bool IsValid(object value)
    {
    if (!(value is IComparable))
        return false;

    switch (_Operation)
    {
        case CompareToOperation.EqualTo: return _Comparision.Equals(value);
        case CompareToOperation.GreaterThan: return _Comparision.CompareTo(value) == 1;
        case CompareToOperation.LessThan: return _Comparision.CompareTo(value) == -1;
    }

    return false;
    }
}

public class SimpleClass
{
   public DateTime Start {get;set;}
   [CompareTo(CompareToOperation.GreaterThan, …
Run Code Online (Sandbox Code Playgroud)

c# validation data-annotations

9
推荐指数
2
解决办法
9820
查看次数

无法在MVC2中设置自定义验证属性的成员名称

我通过继承ValidationAttribute创建了一个自定义验证属性.该属性在类级别应用于我的viewmodel,因为它需要验证多个属性.

我压倒一切

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
Run Code Online (Sandbox Code Playgroud)

并返回:

new ValidationResult("Always Fail", new List<string> { "DateOfBirth" }); 
Run Code Online (Sandbox Code Playgroud)

在所有情况下,DateOfBirth是我的视图模型上的属性之一.

当我运行我的应用程序时,我可以看到它被击中.ModelState.IsValid正确设置为false但是当我检查ModelState内容时,我看到Property DateOfBirth不包含任何错误.相反,我有一个值为null的空字符串Key和一个包含我在验证属性中指定的字符串的异常.

这导致在使用ValidationMessageFor时,我的UI中不显示任何错误消息.如果我使用ValidationSummary,那么我可以看到错误.这是因为它与属性无关.

它看起来好像忽略了我在验证结果中指定了membername的事实.

为什么这样,我该如何解决?

要求的示例代码:

 [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
    public class ExampleValidationAttribute : ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            // note that I will be doing complex validation of multiple properties when complete so this is why it is a class level attribute
            return new ValidationResult("Always Fail", new List<string> { "DateOfBirth" });
        } …
Run Code Online (Sandbox Code Playgroud)

validation asp.net-mvc data-annotations asp.net-mvc-2

9
推荐指数
2
解决办法
3478
查看次数