Почему проверка формы не работает в частичных представлениях MVC3?

Кто-нибудь? Есть еще один вопрос по этому поводу, но единственные ответы заключались в том, чтобы закодировать некоторую проверку javascript, которая также отказывается работать с моим частичным представлением («$ не определено»).

В любом случае, я не хочу использовать javascript, мне просто нужна простая проверка обязательных полей, которые нельзя оставлять пустыми, числовых полей, для которых требуются целые числа и т. д.

Может ли кто-нибудь пролить свет на проверку и частичные представления?


person DevDave    schedule 09.11.2011    source источник
comment
Можем ли мы увидеть код, пожалуйста?   -  person simonlchilds    schedule 09.11.2011
comment
Мне нужно показать какой-то код? Проверка в частичных представлениях, по-видимому, является общей проблемой MVC3 (или даже MVC2), которая, по-видимому, не имеет большого решения, кроме обходных путей Javascript.   -  person DevDave    schedule 09.11.2011
comment
@Tyler, да, вам нужно показать код, позволяющий воспроизвести проблему. Лично у меня никогда не было проблем с проверкой на стороне клиента в частичных файлах в ASP.NET MVC.   -  person Darin Dimitrov    schedule 09.11.2011
comment
хорошо, это просто много кода с 3 частичными представлениями. вероятно, слишком много, чтобы размещать здесь. и после осмотра я подумал, что это общая проблема   -  person DevDave    schedule 09.11.2011
comment
возможный дубликат jquery.validate.unobtrusive не работает с динамическими внедренными элементами   -  person Jon Egerton    schedule 30.01.2013


Ответы (2)


Я подозреваю, что вы загружаете эти частичные представления с помощью AJAX. В этом случае вам нужно будет вручную вызвать метод $.validator.unobtrusive.parse после того, как вы вставите новое содержимое партиала в DOM, как описано в эта статья.

Брэд Уилсон также обсуждал это в своем сообщении в блоге:

Ненавязчивый сценарий проверки клиента автоматически анализирует исходный набор HTML для правил проверки, когда страница завершает загрузку. Если ваша страница динамически добавляет новый HTML-контент (возможно, с помощью Ajax или кода клиентского приложения), вы можете проанализировать этот новый HTML-код для проверки клиентом новых HTML-элементов.

Чтобы проанализировать новый HTML, вы можете вызвать метод jQuery.validator.unobtrusive.parse(), передав ему селектор HTML, который вы хотите проанализировать. Вы также можете вызвать функцию jQuery.validator.unobtrusive.parseElement() для анализа одного элемента HTML.

Поскольку ошибка $ не определена, убедитесь, что вы включили правильные сценарии:

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

Также убедитесь, что вы не ссылаетесь ни на один из сценариев Microsoft*.js. Они устарели и больше не должны использоваться в ASP.NET MVC 3.

Конечно, это только предположение, вы не показали никакого кода, поэтому мы не можем знать, что вы делаете.

person Darin Dimitrov    schedule 09.11.2011

У меня та же проблема, и я обнаружил, что невозможно дважды вызвать $.validator.unobtrusive.parse() в одной и той же форме. При первоначальной загрузке формы с сервера форма автоматически анализируется ненавязчивой библиотекой. Когда вы динамически добавляете элемент ввода в форму и снова вызываете $.validator.unobtrusive.parse(), это не сработает. То же самое касается parseElement().

Поэтому, прежде чем вызывать $.validator.unobtrusive.parse, удалите исходный валидатор и ненавязчивую проверку из формы следующим образом:

success: function (html) {
                        $("#div-id").append(html);
                        var form = $("#div-id").closest("form");
                        form.removeData('validator');
                        form.removeData('unobtrusiveValidation');
                        $.validator.unobtrusive.parse($("#editorRows"));
                    }
person Zain Ali    schedule 30.01.2013