tutorial tag route net mvc for entre diferencias asp asp.net-mvc-2 validation

asp.net-mvc-2 - tag - web forms c#



condicional cualquiera o validaciĆ³n en asp.net mvc2 (2)

En mi página de registro tengo un número de teléfono fijo y campos de número de móvil.

Necesito asegurarme de que el usuario necesita agregar al menos un número de teléfono, ya sea la línea fija o el móvil.

¿Cómo hago esto?

Gracias Arnab


Puede escribir un atributo de validación personalizado y decorar su modelo con él:

[AttributeUsage(AttributeTargets.Class)] public class AtLeastOnePhoneAttribute: ValidationAttribute { public override bool IsValid(object value) { var model = value as SomeViewModel; if (model != null) { return !string.IsNullOrEmpty(model.Phone1) || !string.IsNullOrEmpty(model.Phone2); } return false; } }

y entonces:

[AtLeastOnePhone(ErrorMessage = "Please enter at least one of the two phones")] public class SomeViewModel { public string Phone1 { get; set; } public string Phone2 { get; set; } }

Para escenarios de validación más avanzados, puede echar un vistazo a FluentValidation.NET o Foolproof .


Agregar una solución que se puede aplicar a propiedades individuales, en lugar de anular el método de validación en el nivel de clase ...

Crea el siguiente atributo personalizado. Tenga en cuenta el parámetro "otherPropertyName" en el constructor. Esto le permitirá pasar la otra propiedad para usar en la validación.

public class OneOrOtherRequiredAttribute: ValidationAttribute { public string OtherPropertyName { get; set; } public OneOrOtherRequiredAttribute(string otherPropertyName) { OtherPropertyName = otherPropertyName; } protected override ValidationResult IsValid(object value, ValidationContext validationContext) { var otherPropertyInfo = validationContext.ObjectType.GetProperty(OtherPropertyName); var otherValue = (string)otherPropertyInfo.GetValue(validationContext.ObjectInstance, null); if (string.IsNullOrEmpty(otherValue) && string.IsNullOrEmpty((string)value)) { return new ValidationResult(this.ErrorMessage); //The error message passed into the Attribute''s constructor } return null; } }

Luego puede decorar sus propiedades de la siguiente manera: (asegúrese de pasar el nombre de la otra propiedad para comparar)

[OneOrOtherRequired("GroupNumber", ErrorMessage = "Either Group Number or Customer Number is required")] public string CustomerNumber { get; set; } [OneOrOtherRequired("CustomerNumber", ErrorMessage="Either Group Number or Customer Number is required")] public string GroupNumber { get; set; }