这是我的模特:
[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:
如果用户CellPhone从DropDownList验证中选择
[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)
你的建议是什么?
使用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) 我正在尝试编写自己的程序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。传递该财产的价值的解决方案是什么?
我目前正在编写自定义所需的验证属性,并且我想在值为 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 。