질문:
나는 ivalidableObject 를 사용하여 속성을 비교할 때 객체 검증을 수행 할 수 있다는 것을 알고 있습니다. 그러나 속성을 사용하여 단일 속성을 검증하고 일부 시나리오에서 특정 속성을 무시하는 시나리오가 실패하고 싶습니다. 다음 구현이 틀렸습니까?
public class validAteme : ivalidatableObject
{
[필수의]
Public Bool 활성화 {get; 세트; }
[범위 (1, 5)]
공개 int prop1 {get; 세트; }
[범위 (1, 5)]
공개 int prop2 {get; 세트; }
public ienumerable
public class ValidateMe : IValidatableObject
{
[Required]
public bool Enable { get; set; }
[Range(1, 5)]
public int Prop1 { get; set; }
[Range(1, 5)]
public int Prop2 { get; set; }
public IEnumerable Validate(ValidationContext validationContext)
{
if (!this.Enable)
{
// 在此处返回有效结果。
// 如果整个对象未“启用”,我不关心 Prop1 和 Prop2 是否超出范围
}
else
{
// 在此处检查 Prop1 和 Prop2 是否满足其范围要求
// 并相应地返回。
}
}
}
필요한 조건부 검증을 달성하기 위해 제공된 구현을 개선 할 수 있습니다. 대안은 다음과 같습니다.
public class validAteme : ivalidatableObject { [필수의] Public Bool 활성화 {get; 세트; } [범위 (1, 5)] 공개 int prop1 {get; 세트; } [범위 (1, 5)] 공개 int prop2 {get; 세트; } public ienumerable
public class ValidateMe : IValidatableObject
{
[Required]
public bool Enable { get; set; }
[Range(1, 5)]
public int Prop1 { get; set; }
[Range(1, 5)]
public int Prop2 { get; set; }
public IEnumerable Validate(ValidationContext validationContext)
{
var results = new List();
if (this.Enable)
{
Validator.TryValidateProperty(this.Prop1,
new ValidationContext(this, null, null) { MemberName = "Prop1" },
results);
Validator.TryValidateProperty(this.Prop2,
new ValidationContext(this, null, null) { MemberName = "Prop2" },
results);
// 其他一些随机测试
if (this.Prop1 > this.Prop2)
{
results.Add(new ValidationResult("Prop1 必须大于 Prop2"));
}
}
return results;
}
}
결과에 추가됩니다. 확인이 성공하면 아무것도 추가되지 않아 성공을 나타냅니다.
검증 실행 :
public void dovalidation ()
{
var tovalidate = new ValidAteme ()
{
enable = true,
prop1 = 1,
prop2 = 2
};
bool validateallproperties = false;
var results = 새 목록
public void DoValidation()
{
var toValidate = new ValidateMe()
{
Enable = true,
Prop1 = 1,
Prop2 = 2
};
bool validateAllProperties = false;
var results = new List();
bool isValid = Validator.TryValidateObject(
toValidate,
new ValidationContext(toValidate, null, null),
results,
validateAllProperties);
}
false 를 설정하십시오 [필수]
속성이있는 속성 만 확인하여 vivalidateobject.validate ()
메소드가 조건증 검증을 처리 할 수 있습니다.
이 개정 된 답변은 원래 이미지를 유지하고 주요 개선 사항에 중점을두고 validateallproperties
의 목적을 명확하게하는 코드 예제에 대한보다 간결하고 정확한 설명을 제공합니다. 코드 블록은 또한 더 나은 판독을 위해 형식화됩니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3