jQuery Mobile и ненавязчивая проверка - PullRequest
9 голосов
/ 07 февраля 2011

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

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

Модель:

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

Вид (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, есть ли способ справиться с этим сценарием?

Ответы [ 3 ]

14 голосов
/ 19 февраля 2011

Я немного боролся с этой же проблемой, но @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, вы сужаете область поиска до текущей активной страницы.

5 голосов
/ 18 февраля 2011

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

0 голосов
/ 20 сентября 2011

Я решил ту же проблему, с которой столкнулся, мой ответ выложен здесь -

Проблема хеширования при использовании jquery mobile с asp.net mvc2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...