标签: validationattribute

按条件更改ASP.NET MVC 3中的属性的验证

这是我的模特:

[RegularExpression(@"^08[589][0-9]{8}$", ErrorMessage = "Invalid Number!")]
public string Phone { get; set; }

[ForeignKey]
public long PhoneType { get; set; } // 1-CellPhone , 2-Phone
Run Code Online (Sandbox Code Playgroud)

所以如果我想说更具体的话,我想改变RegularExpressionValidation by Change PhoneType:

如果用户CellPhoneDropDownList验证中选择

[RegularExpression(@"^08[589][0-9]{8}$", ErrorMessage = "Invalid Number!")] 
Run Code Online (Sandbox Code Playgroud)

如果选择Phone验证

 [RegularExpression("^[1-9][0-9]{9}$", ErrorMessage = "Invalid Number!")]
Run Code Online (Sandbox Code Playgroud)

你的建议是什么?

validation asp.net-mvc validationattribute asp.net-mvc-3

2
推荐指数
1
解决办法
1982
查看次数

DataType(DataType.PhoneNumber)和PhoneAttribute之间有什么区别

使用DataTypeAttribute和传入值DataType.Phone以及继承和自动设置的PhoneAttribute之间的区别是什么?DataTypeDataType.Phone

这两个班级有什么区别吗?

class Person {
   [DataType(DataType.PhoneNumber)]
   public string PhoneNumber {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
class Person {
   [Phone]
   public string PhoneNumber {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

.net c# validationattribute data-annotations

2
推荐指数
1
解决办法
209
查看次数

将类的属性传递给 ValidationAttribute

我正在尝试编写自己的程序ValidationAttribute,我想将我的类的参数值传递给ValidationAttribute. 很简单,如果布尔属性是true,则顶部的属性ValidationAttribute不应该为 null 或为空。

我的课:

public class Test
{
    public bool Damage { get; set; }
    [CheckForNullOrEmpty(Damage)]
    public string DamageText { get; set; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的属性:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我不能像这样简单地将类内的属性传递给 ValidationAttribute。传递该财产的价值的解决方案是什么?

c# asp.net validationattribute asp.net-core

2
推荐指数
1
解决办法
1751
查看次数

C# 如何确定对象中包装的值是 null 还是默认值?

我目前正在编写自定义所需的验证属性,并且我想在值为 null 或默认值时恢复错误。对于默认值,我的意思是“”代表字符串,0代表整数,0.0代表双精度,空代表对象。

为了实现这一目标,我调用以下函数,该函数适用于任何类型

    protected bool IsNullOrDefault<T>(T value)
    {
        return object.Equals(value, default(T));
    }
Run Code Online (Sandbox Code Playgroud)

以下是测试:

    object obj = null;
    bool flag = IsNullOrDefault(obj));
Run Code Online (Sandbox Code Playgroud)

标志=真

    int i = 0;
    bool flag = IsNullOrDefault(i);
Run Code Online (Sandbox Code Playgroud)

标志=真

    double d = 0.0;
    Console.WriteLine(IsNullOrDefault(d));
Run Code Online (Sandbox Code Playgroud)

标志=真

    object value = 0;
    Console.WriteLine(IsNullOrDefault(value));
Run Code Online (Sandbox Code Playgroud)

标志=假

这里对象内部又包含了int,但它仍然认为它是一个对象,其默认值为null,当前值为0。所以它返回False

问题是,我要重写的框架方法为我提供了对象值,因此它将始终与上面提到的最后一个场景相匹配。

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

根据值,我们如何将对象转换为实际类型(在本例中为int )?因此,即使对于上面的最后一个场景,我也会收到True 。

c# null object default-value validationattribute

1
推荐指数
1
解决办法
508
查看次数