Necesitamos tu ayuda para compartir nuestras crónicas acerca de las ciencias de la computación.
Podrías escribir una validación personalizada attribute:
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();
var totalLength = values.Sum(x => x.Length) + Convert.ToString(value).Length;
if (totalLength < this.MinLength)
return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName));
return null;
y luego podría tener un modelo de vista y decorar una de sus propiedades con él:
public class MyViewModel
[CombinedMinLength(20, "Bar", "Baz", ErrorMessage = "The combined minimum length of the Foo, Bar and Baz properties should be longer than 20")]
public string Foo get; set;
public string Bar get; set;
public string Baz get; set;
Modelo autovalidado
Su modelo debe implementar una interfaz IValidatableObject
. Pon tu código de validación en Validate
método:
public class MyModel : IValidatableObject
public string Title get; set;
public string Description get; set;
public IEnumerable Validate(ValidationContext validationContext)
if (Title == null)
yield return new ValidationResult("*", new [] nameof(Title) );
if (Description == null)
yield return new ValidationResult("*", new [] nameof(Description) );
Tenga en cuenta: este es un lado del servidor validación. No funciona en el lado del cliente. Su validación se realizará solo después del envío del formulario.
ExpressiveAnnotations te da esa posibilidad:
[Required]
[AssertThat("Length(FieldA) + Length(FieldB) + Length(FieldC) + Length(FieldD) > 50")]
public string FieldA get; set;
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)