仅在填充字段时验证字段
Validate a field only if it is populated
我在验证 phone 个数字时遇到问题。在我们的系统中,您可以存储两个 phone 号码。我遇到的问题是这些是可选字段。所以我希望它验证 phone 数字 IF 并且仅当用户尝试在其中输入 phone 数字时。如果不是可以留空。
我正在使用 Phone 属性并设置了 MaxLength。我尝试将 MinLength 设置为 0,但这不起作用。
[Phone]
[MaxLength(24)]
[MinLength(0)]
public string PhoneNum1
{
get { return phoneNum1; }
set
{
if (phoneNum1 != value)
{
phoneNum1 = value;
RaisePropertyChanged("PhoneNum1");
}
}
}
此外,我们还有一个复选框,如果勾选,用户必须至少添加 phone 个数字之一。我还没有尝试过这个,所以从技术上讲,我并不是在寻求该解决方案,但如果有任何解决方案能够考虑到这一点,那就太好了。
这是我正在使用的 WPF。我正在使用 ValidatesOnDataErrors 和 NotifyOnValidationError
<TextBox Margin="0,10,0,0" Grid.Row="10" Grid.Column="2"
Text="{Binding PhoneNum1, Mode=TwoWay, ValidatesOnDataErrors=True,
NotifyOnValidationError=True, UpdateSourceTrigger=PropertyChanged}"/>
你可以在原来的PhoneAttribute
的基础上实现你的OptionalPhoneAttribute
:
public sealed class OptionalPhoneAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var phone = new PhoneAttribute();
//return true when the value is null or empty
//return original IsValid value only when value is not null or empty
return (value == null || string.IsNullOrEmpty(Convert.ToString(value)) || phone.IsValid(value));
}
}
那么您可以只使用这个新属性:
[OptionalPhone]
[MaxLength(24)]
public string PhoneNum1
{
get { return phoneNum1; }
set
{
if (phoneNum1 != value)
{
phoneNum1 = value;
RaisePropertyChanged("PhoneNum1");
}
}
}
我在验证 phone 个数字时遇到问题。在我们的系统中,您可以存储两个 phone 号码。我遇到的问题是这些是可选字段。所以我希望它验证 phone 数字 IF 并且仅当用户尝试在其中输入 phone 数字时。如果不是可以留空。
我正在使用 Phone 属性并设置了 MaxLength。我尝试将 MinLength 设置为 0,但这不起作用。
[Phone]
[MaxLength(24)]
[MinLength(0)]
public string PhoneNum1
{
get { return phoneNum1; }
set
{
if (phoneNum1 != value)
{
phoneNum1 = value;
RaisePropertyChanged("PhoneNum1");
}
}
}
此外,我们还有一个复选框,如果勾选,用户必须至少添加 phone 个数字之一。我还没有尝试过这个,所以从技术上讲,我并不是在寻求该解决方案,但如果有任何解决方案能够考虑到这一点,那就太好了。
这是我正在使用的 WPF。我正在使用 ValidatesOnDataErrors 和 NotifyOnValidationError
<TextBox Margin="0,10,0,0" Grid.Row="10" Grid.Column="2"
Text="{Binding PhoneNum1, Mode=TwoWay, ValidatesOnDataErrors=True,
NotifyOnValidationError=True, UpdateSourceTrigger=PropertyChanged}"/>
你可以在原来的PhoneAttribute
的基础上实现你的OptionalPhoneAttribute
:
public sealed class OptionalPhoneAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var phone = new PhoneAttribute();
//return true when the value is null or empty
//return original IsValid value only when value is not null or empty
return (value == null || string.IsNullOrEmpty(Convert.ToString(value)) || phone.IsValid(value));
}
}
那么您可以只使用这个新属性:
[OptionalPhone]
[MaxLength(24)]
public string PhoneNum1
{
get { return phoneNum1; }
set
{
if (phoneNum1 != value)
{
phoneNum1 = value;
RaisePropertyChanged("PhoneNum1");
}
}
}