2011-08-11 30 views
7

que están utilizando Asp.net MVC 3, frente a un problema de validación con DataAnnotations como modelo a continuaciónAsp.net MVC 3 de validación condicional con DataAnnotations

hemos mantenido en el proyecto de la biblioteca separada, jerarquía de clases de modelo es como continuación

public class EditAlternateMailingAddressModel : BaseModel 
{ 
    public UserAddressDetails AlternateAddressDetails { get; set; } 

    public List<UsState> StateList { get; set; }   
} 

ahora userAddressDetails se define como a continuación

public partial class UserAddressDetails 
    { 
     public string DeliveryLine { get; set; } 
     public string Zip { get; set; } 
     public bool IsDefaultMailingAddress { get; set; }   
    } 

lógica de validación se definen en clase separada, como a continuación

[MetadataType(typeof(UserAddressDetailsMetaData))] 
public partial class UserAddressDetails 
{ 
    private class UserAddressDetailsMetaData 
    { 

     [Required(ErrorMessage = "Please enter address.")] 
     public string DeliveryLine { get; set; } 

     [Required(ErrorMessage = "Please enter city.")] 
     public string City { get; set; } 
     public bool IsDefaultMailingAddress { get; set; 
} 

en vista de edición, DeliveryLine, Código Postal dependen de IsDefaultMailingAddress ya que estos campos deben ser proporcionados si IsDefaultMailingAddress es cierto, de lo contrario deje forma que se presentará.

para abrir y enviar parcialmente los formularios que estamos usando jQuery.

ya Tratamos a continuación http://andrewtwest.com/2011/01/10/conditional-validation-with-data-annotations-in-asp-net-mvc/ http://blogs.msdn.com/b/simonince/archive/2010/06/04/conditional-validation-in-mvc.aspx

pero éstos son despedidos de validación del lado del servidor, tenemos que hacer que funcione en el lado del cliente.

+0

Ha visto http://stackoverflow.com/questions/ 4833280/asp-net-mvc-3-discretus-custom-client-validation? – Jack

Respuesta

2

Debe crear su propia ValidationAttribute personalizada. Si desea la validación del cliente, su atributo debe implementar la interfaz IClientValidatable y debe escribir un validador personalizado del lado del cliente.

Actualizado: añadido ejemplos de código

La implementación de validación:

public class CustomRequiredAttribute : ValidationAttribute, IClientValidatable 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     // your validation logic here 
     return ValidationResult.Success; 
    } 

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules() 
    { 
     return new[] {new CustomRequiredValidationRule (ErrorMessage)}; 
    } 
} 

public class CustomRequiredValidationRule : ModelClientValidationRule 
{ 
    public RequiredIfVisibleValidationRule(string errorMessage) 
    { 
     ValidationType = "customRequire"; 
     ErrorMessage = errorMessage; 
    } 
} 

Adición de validación del lado del cliente:

(function ($) { 
    $.validator.addMethod('customRequire', function (value, element) { 
     // your validation logic here 
     return true; // true if valid, otherwise false 
    }); 
    $.validator.unobtrusive.adapters.add('customRequire'); 
})(jQuery); 
+0

Relacionados http://stackoverflow.com/questions/7025198/mvc3-custom-validation-compare-two-dates – hazzik

Cuestiones relacionadas