Dans ASP.NET MVC, vous pouvez facilement utiliser l'annotation de données StringLength pour valider la longueur d'une seule propriété. Toutefois, dans certains cas, vous devrez peut-être vérifier la longueur combinée de plusieurs propriétés de chaîne. Cet article décrit l'approche MVC recommandée pour y parvenir à l'aide d'annotations de données personnalisées.
Pour valider la longueur combinée, créez un attribut de validation personnalisé :
<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 < this.MinLength) { return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName)); } return ValidationResult.Success; } }</code>
Dans votre modèle de vue, décorez les propriétés souhaitées avec des propriétés personnalisées :
<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>
Avec ce paramètre, si la longueur combinée des propriétés Foo, Bar et Baz est inférieure à la longueur minimale spécifiée, la validation du modèle échouera avec le message d'erreur défini dans les propriétés. La gestion des valeurs nulles a été ajoutée au code pour éviter les exceptions causées par les valeurs d'attribut nulles. Les messages d'erreur ont également été localisés pour être plus conviviaux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!