使用資料註解在 ASP.NET MVC 中驗證多個屬性的組合長度
在 ASP.NET MVC 中,使用 StringLength
註解驗證單一屬性的長度是一種常見做法。但是,在某些情況下,您需要驗證多個屬性的組合長度。本文探討了使用資料註解實現此目標的符合 MVC 的方法。
自訂驗證屬性
要驗證多個屬性的組合長度,您可以建立一個自訂驗證屬性。這是一個範例:
<code class="language-csharp">public class CombinedMinLengthAttribute : ValidationAttribute { public CombinedMinLengthAttribute(int minLength, params string[] propertyNames) { this.PropertyNames = propertyNames; this.MinLength = minLength; } public string[] PropertyNames { get; private set; } public int MinLength { get; private set; } protected override ValidationResult IsValid(object value, ValidationContext validationContext) { var properties = this.PropertyNames.Select(validationContext.ObjectType.GetProperty); var values = properties.Select(p => p.GetValue(validationContext.ObjectInstance, null)).OfType<string>(); var totalLength = values.Sum(x => x?.Length ?? 0) + (value?.ToString()?.Length ?? 0); //处理空值情况 if (totalLength < MinLength) { return new ValidationResult(FormatErrorMessage(validationContext.DisplayName)); } return ValidationResult.Success; } }</code>
使用方法
要使用此自訂屬性,您可以使用它來裝飾視圖模型中的屬性:
<code class="language-csharp">public class MyViewModel { [CombinedMinLength(20, "Bar", "Baz", ErrorMessage = "Foo, Bar 和 Baz 属性的组合最小长度应大于 20")] public string Foo { get; set; } public string Bar { get; set; } public string Baz { get; set; } }</code>
當驗證模型時,將呼叫自訂屬性的 IsValid
方法,並且將指定屬性的組合長度與已裝飾屬性的值一起針對指定的最小長度進行驗證。 改進後的程式碼加入了空值處理,避免了潛在的 NullReferenceException
。
以上是如何使用資料註解驗證 ASP.NET MVC 中多個屬性的組合長度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!