使用ivalidatableObject
> IValidatableObject
接口提供了一種在.NET中執行綜合對象驗證的有力方法,包括交叉特性檢查。但是,基於某些條件的選擇性忽略驗證規則可能很棘手。 此示例演示瞭如何有效地實現條件性屬性驗證。
以下是一個代碼段,說明了實現:
<code class="language-csharp">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<ValidationResult> Validate(ValidationContext validationContext) { var results = new List<ValidationResult>(); if (Enable) { // Conditionally validate Prop1 and Prop2 Validator.TryValidateProperty(Prop1, new ValidationContext(this, null, null) { MemberName = "Prop1" }, results); Validator.TryValidateProperty(Prop2, new ValidationContext(this, null, null) { MemberName = "Prop2" }, results); // Add a custom conditional validation rule if (Prop1 > Prop2) { results.Add(new ValidationResult("Prop1 must be less than or equal to Prop2")); } } return results; } }</code>
此代碼使用Enable
屬性來控制驗證。 如果Enable
為true,則使用Prop1
>屬性驗證Prop2
>> [Range]
Prop1
>確保Prop2
>的自定義規則不大於Validator.TryValidateProperty()
>。 results
方法是關鍵;它僅在驗證失敗時將驗證錯誤添加到
>
使用此驗證:<code class="language-csharp">public void PerformValidation() { var toValidate = new ValidateMe { Enable = true, Prop1 = 6, //This will cause a validation error Prop2 = 2 }; bool validateAllProperties = false; // Important: Set to false for conditional validation var results = new List<ValidationResult>(); bool isValid = Validator.TryValidateObject(toValidate, new ValidationContext(toValidate, null, null), results, validateAllProperties); //Process validation results (results list) }</code>
validateAllProperties
設置false
Validator.TryValidateObject()
至關重要。 這樣可以防止IValidatableObject
覆蓋條件驗證邏輯。 此方法結合了.NET應用程序中靈活和可靠的對象驗證的有條件驗證。
以上是如何使用.NET中的IvalidatableObject實施條件屬性驗證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!