2012-02-15 3 views
5

Mam kilka danych wejściowych podzielonych na różne pojemniki (panele). Problem polega na tym, że jeśli jeden z tych paneli jest ukryty (style="display:none;"), wtyczka jQuery.validate nie sprawdza poprawności tych danych wejściowych.jQuery.validate nie działa, jeśli kontener jest ukryty

zrobię test z małego przykład i zdarza się ten sam problem:

widok:

@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> 

} 

Model:

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; } 

} 

W "nazwa_użytkownika" właściwość nie jest potwierdzone na klient, gdy jest w dziale ze stylem "display:none;"

Dziękuję Ci

+0

Co zrobisz, jeśli to sprawdzanie się nie powiedzie? W jaki sposób użytkownik skoryguje to, jeśli jest ukryty? Sensowne jest, aby jQuery sprawdzał tylko te pola, które są widoczne na stronie, i które użytkownik może poprawić w razie niepowodzenia reguły. – ShankarSangoli

+0

@ShankarSangoli Jak wyjaśniam w pytaniach, są to pola, które są ukryte w panelach, aby zapobiec bardzo długiemu oglądaniu, jeśli nie zostanie zatwierdzone, pokaż panele z błędem. To tylko prosty przykład z tym samym problemem. –

Odpowiedz

17

jego pożądane zachowanie, aby nie walidacji ukrytych pól wejściowych z jQuery Weryfikuj plugin można zweryfikować ukrytych pól wejść poprzez ustawienie opcji ignorowania jak

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

ale skoro używasz dyskretne walidacji w mvc3 który używa validate jquery plugin nie można zainicjować Wtyczka siebie będziesz musiał zmienić ustawienie po jego zainicjowany jak

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

Reference

This is also a helpful blogpost

+1

To było bardzo pomocne dla mnie z innymi problemami z weryfikacją. Dziękuję Ci. (Niezwiązane z pierwotnym pytaniem) – Ciel