2012-08-05 9 views
5

Mam formularz, który ma możliwość podania wymiarów:MVC 3 dyskretne walidacji - warunkowo wyłączyć/włączyć zatwierdzanie

  • Szerokość & Wysokość
  • Szerokość
  • Wysokość

I Mam dwa pojemniki div, które ukrywam/pokazuję w zależności od tego, która z trzech opcji jest wybrana:

<div class="editor-field" id="width-container"> 
    @Html.EditorFor(model => model.Width) 
    @Html.ValidationMessageFor(model => model.Width) 
</div> 

<div class="editor-field" id="height-container"> 
    @Html.EditorFor(model => model.Height) 
    @Html.ValidationMessageFor(model => model.Height) 
</div> 

Jeśli wybrano wysokość, szerokość nie jest wyświetlana w formularzu, w jaki sposób można wyłączyć dyskretną walidację w polu wprowadzania Szerokość w sposób, który pozwoli mi z łatwością przywrócić go, jeśli użytkownik zmieni zdanie, tj. usuwanie danych - atrybuty * nie są opcją. Cieszę się, że mogę utworzyć klasę CustomAttribute, aby obsłużyć to, ale nie chcę zhakować standardowych plików jquery, aby to działało, ponieważ sprawia, że ​​aktualizacja nowych wersji powoduje bóle głowy w dół. Jeśli wszystko inne zawiedzie, użyję zwykłej sztuczki dodawania wartości 0 do pól, gdy nie będą one widoczne, a następnie usunięcia ich, gdy zostaną wyświetlone.

EDIT:

Proszę mieć na uwadze, że gdy szerokość nie jest widoczne, że nie jest „ukryty” pole per se to tylko tag wejście to nie jest widoczne dla użytkownika, ponieważ div rodzic ma styl wyświetlania: żaden

Odpowiedz

12

można ustawić walidator jQuery, który jest przetwarzanie swoje dyskretne walidacji ignorować ukryte elementy:

jQuery.validator.defaults.ignore = ":hidden"; 

// the line above is outside any $(document).ready(...) or similar 
$(document).ready(function(){ 
    ... 
}); 
... 
+0

Widziałem różne wersje tego, ale żaden z nich nie wydają się działać - doszedłem do wniosku, że problem jest albo, że zasada ta nie działa, ponieważ nie jest to tag wejściowy, który jest ukryty to div rodzic - lub ta reguła jest zaprojektowana do pracy nad "ukrytymi" znacznikami, a nie "niewidzialnymi" znacznikami wejściowymi. BTW Próbowałem Twojego rozwiązania i nie działa. – Rob

+0

': hidden' jest zdecydowanie prawdziwe dla elementów, które są ukryte, ponieważ ich rodzice są ukryte. Jak widać w tym skrzypcach, moje rozwiązanie działa dobrze w podstawowym przypadku: http://jsfiddle.net/7PmEz/5/. Spróbujmy więc znaleźć, gdzie delta jest do tego, co masz, musi być coś jeszcze brakuje. Proszę umieścić wygenerowany HTML w jsfiddle, a następnie spróbuj użyć tego samego javascript, którego używam do przetestowania go. Jeśli to działa, opublikuj cały kod widoku, abyśmy mogli rzucić okiem. – Milimetric

+0

Hmmm frustrujące, naprawdę nie mogę umieścić kodu w jsfiddle, ponieważ jest generowany przy użyciu MS MVC3 framework - więc nie jest to naprawdę ważne porównanie ... – Rob

1

Więc wydaje się, że to jest odpowiedź na moje pytanie (I poszedł na polowanie ponownie w Google trudno szukać za rzeczy, które nie odnoszą się do "ukrytych" pól):

https://stackoverflow.com/a/7673985/491950

np

$("#height-container input[type='text']").attr("disabled", "disabled"); 

Dzięki za odpowiedzi.

+0

Więc jak wpisać dane wejściowe? – stuartdotnet

+0

jest wyłączany tylko wtedy, gdy nie jest wyświetlany użytkownikowi - zobacz link SO powyżej mojej odpowiedzi – Rob

Powiązane problemy