9

Tworzę aplikację opartą na jQuery Mobile (Alpha 3) opartą na dyskretnym sprawdzaniu poprawności, która jest dostarczana z MVC3. Gdy strona jest dostępna bezpośrednio (bez skrótu w adresie URL), sprawdzanie poprawności działa idealnie. Jednak po przejściu do strony jQuery Mobile korzysta z nawigacji Ajax do dynamicznego ładowania (wyświetlanie skrótu w adresie URL) i sprawdzanie poprawności przestaje działać.jQuery Mobile i dyskretna weryfikacja

Oto przykład kodu w użytku:

Model:

[Required(ErrorMessage = "Missing value")] 
[DisplayName("Property Display Name")] 
public int? PropertyName { get; set; } 

View (Razor):

@Html.LabelFor(model => model.PropertyName) 
@Html.TextBoxFor(model => model.PropertyName) 
@Html.ValidationMessageFor(model => model.PropertyName) 

Generated HTML:

<label for="PropertyName">Property Display Name</label> 
<input data-val="true" data-val-number="The field Property Display Name must be a number." data-val-required="Missing value" id="PropertyName" name="PropertyName" type="text" value="" /> 
<span class="field-validation-valid" data-valmsg-for="PropertyName" data-valmsg-replace="true"></span> 

Możliwe, że inne strony zostały wcześniej załadowane, a elementy HTML nie mają już unikalnych identyfikatorów. Oprócz toczenia mojej własnej klasy Html Helper do generowania kodu HTML Label, TextBox i ValidationMessage, czy istnieje jakiś sposób na obsłużenie tego scenariusza?

+0

zastanawiałem się o unikalne identyfikatory z JQM i wciąż mnie dręczy. Sami autorzy JQM niewiele o tym mówią. Widziałem nawet przykład stopek, w których identyfikatory zostały zduplikowane. Widzę dwa rozwiązania - albo zająć się własnymi identyfikatorami, albo zniszczyć buforowanie JQM przez wymuszone usunięcie strony, którą opuszczasz z DOM, gdy ładuje się nową - 'pagebeforecreate' event – naugtur

+0

Mamy podobne problemy, ale niestety w ogóle to działa. Jesteśmy na jQ 1.5 i jQM 1.03a. Zmaganie tutaj .. – pavsaund

Odpowiedz

5

Zadzwoniłeś pod numer jQuery.validator.unobtrusive.parse() po załadowaniu nowej treści? Przeczytaj this post na blogu Brada Wilsona.

14

Trochę borykałem się z tym samym problemem, ale @Zote wskazał mi właściwy kierunek.

parse() jest droga, ale upewnij się, aby przejść w IE selektora:

jQuery.validator.unobtrusive.parse("form") 

lub

jQuery.validator.unobtrusive.parse(document) 

Najlepszym sposobem spinanie to w górę to prawdopodobnie przez JQMs pageshow wydarzenie. To wtedy być wyzwalane po każdej nowej stronie przejścia, tak jak, można również wolą to zrobić przed jqm uczynił to magia na stronie, jak również za pomocą zdarzenia

$('div').live('pageshow',function(event){ 
    jQuery.validator.unobtrusive.parse(".ui-page-active form"); 
}); 

pagebeforeshow Używając .ui-page-active, ci zawęzić wyszukiwanie do aktualnie aktywnej strony.

+1

To powinno być zaakceptowane jako odpowiedź. Najnowszym kodem dla jQuery 1.7 i jqm 1.2 będzie: $ (document) .on ('pageinit', '#feedback_page', function (e) { $ .validator.unobtrusive.parse ($ (this) .find (' formularz ")); }); – TruMan1