9

Я создаю приложение jQuery Mobile (Alpha 3) на основе ASP.NET MVC 3, используя ненавязчивую проверку, которая поставляется с MVC3. Когда к странице обращаются напрямую (без хеша в URL-адресе), валидация работает отлично. Однако, когда вы переходите на страницу, jQuery Mobile использует Ajax Navigation для динамической загрузки (отображение хэша в Url), и проверка перестает работать.jQuery Мобильная и ненавязчивая проверка

Вот пример кода в использовании:

Модель:

[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) 

Сгенерированный 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> 

Возможно, что ранее были загружены другие страницы, и элементы HTML больше не имеют уникальных идентификаторов. Помимо переноса собственного класса Html Helper для генерации HTML для Label, TextBox и ValidationMessage, есть ли способ справиться с этим сценарием?

+0

Я удивлялся уникальных идентификаторов с JQM и она по-прежнему беспокоит меня. Авторы JQM сами не говорят об этом. Я даже видел пример поддерживающих нижних колонтитулов, где идентификаторы дублировались. Я вижу два решения: либо самостоятельно заботиться о своих идентификаторах, либо уничтожать кеширование JQM, принудительно удаляя страницу, которую вы оставляете из DOM, когда загружается новая, - событие 'pagebeforecreate' – naugtur

+0

У нас похожие проблемы, Это вообще не работало. Мы находимся на jQ 1.5 и jQM 1.03a. Борясь здесь .. – pavsaund

ответ

5

Ты зарегистрировал номер jQuery.validator.unobtrusive.parse() после загрузки нового контента? Прочитать this post в блоге Брэда Уилсона.

14

Я немного борюсь с этой же проблемой, но @Zote указал мне в правильном направлении.

parse() это путь, но убедитесь, что пройти в то есть селектор:

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

или

jQuery.validator.unobtrusive.parse(document) 

Лучший способ закреплять это вверх, вероятно, через JQMs pageshow событие. Это будет затем запускается после каждой новой страницы перехода, как это так, Вы можете также предпочитают делать это раньше jqm сделал это волшебство на странице, а также с помощью pagebeforeshow событие

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

Используя .ui-page-active, вы сузите поиск до текущей активной страницы.

+1

Это должно быть принято как ответ. Последним кодом для jQuery 1.7 и jqm 1.2 будет: $ (document) .on ('pageinit', '#feedback_page', function (e) { $ .validator.unobtrusive.parse ($ (this) .find (' форма ')); }); – TruMan1

Смежные вопросы