2012-02-15 9 views
5

tengo varios entrada separada en diferentes contenedores (paneles). El problema que tengo es que si uno de estos paneles está oculto (style="display:none;"), el complemento jQuery.validate no valida esas entradas.jQuery.validate no válido si el contenedor se oculta

que hacer una prueba con un pequeño ejemplo y ocurre el mismo problema:

vista:

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>Fields</legend> 

     <div class="UserName" style="display:none;"> 
      <div class="editor-label"> @Html.LabelFor(model => model.UserName) </div> 
      <div class="editor-field"> 
       @Html.TextBoxFor(model => model.UserName) @Html.ValidationMessageFor(model => model.UserName) 
      </div> 
     </div> 

     <div class="editor-label"> @Html.LabelFor(model => model.FirstName) </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.FirstName) @Html.ValidationMessageFor(model => model.FirstName) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.LastName) 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.LastName) @Html.ValidationMessageFor(model => model.LastName) 
     </div> 

     <div class="editor-label"> @Html.LabelFor(model => model.City) </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.City) @Html.ValidationMessageFor(model => model.City) 
     </div> 

     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 

} 

Modelo:

public class UserModel { 

    [Required] 
    [StringLength(6, MinimumLength = 3)] 
    [Display(Name = "User Name")] 
    [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed")] 
    [ScaffoldColumn(false)] 
    public string UserName { get; set; } 

    [Required] 
    [StringLength(8, MinimumLength = 3)] 
    [Display(Name = "First Name")] 
    public string FirstName { get; set; } 
    [Required] 
    [StringLength(9, MinimumLength = 2)] 
    [Display(Name = "Last Name")] 
    public string LastName { get; set; } 
    [Required()] 
    public string City { get; set; } 

} 

La propiedad "nombre de usuario" no se valida en el cliente cuando está dentro del div con estilo "display:none;"

Gracias que

+0

¿Qué harás si la validación falla? ¿Cómo lo corregirá el usuario si está oculto? Tiene sentido para jQuery validar solo los campos que están visibles en la página y el usuario puede corregirlos en caso de que fallen la regla. – ShankarSangoli

+0

@ShankarSangoli Como explico en las preguntas, hay campos que están ocultos en los paneles para evitar que la vista sea muy larga, si no se valida, muestra los paneles con error. Este es solo un ejemplo simple con el mismo problema. –

Respuesta

17

su comportamiento deseado a no validar los campos de entrada ocultos, la validación plugin de jQuery puede validar los campos de entradas ocultas estableciendo la opción ignorar como

$('#fromID').validate({ 
      ignore: "",    
     }); 

pero dado que está utilizando la validación discreta en MVC3 que utiliza el plugin de validación de jQuery que no puede inicializar el plugin de sí mismo que tendrá que cambiar su configuración después de su inicializado como

var validatorSettings = $.data($('form')[0], 'validator').settings; 
validatorSettings.ignore = ""; 

Reference

This is also a helpful blogpost

+1

Esto fue muy útil para mí con otros problemas de validación. Gracias. (No relacionado con la pregunta original) – Ciel

Cuestiones relacionadas