0

Я пытаюсь реализовать мастер в MVC, используя методы, описанные в статье Create a Wizard in ASP.NET MVC 3. (Я использую последнюю версию MVC.)

Но я, кажется, возникли проблемы со следующей строки кода:

var validator = $("form").validate(); // obtain validator 

Эта строка вызывает ошибку, потому что $("form").validate не определено.

К сожалению, я действительно не знаю, как этот конкретный код предназначен для работы, и поэтому я не уверен, как его исправить. Может ли кто-нибудь объяснить, что здесь происходит? Где должно быть определено validate?

+1

Предполагается, что он определен в плагине проверки jQuery, который вы, вероятно, включили где-нибудь? – adeneo

+0

Я подумал об этом. Но мой файл макета включает '@ Styles.Render (" ~/Content/css ") @ Scripts.Render (" ~/bundles/jquery ") @ Scripts.Render (" ~/bundles/jqueryval ") @ Сценарии. Визуализация ("~/пачки/Modernizr") '. –

+0

Попробуйте console.log ($ ("form")), чтобы вы могли проверить консоль, если форма действительно находится в DOM, и если вы можете найти подтверждение как метод в прототипе объекта jquery ('__proto__'). – Trace

ответ

3

Фактически по умолчанию файл _Layout.cshtml содержит файлы сценариев в конце страницы (непосредственно перед закрывающим тегом тела), и если вы посмотрите на отображаемую страницу в браузере, вы увидите это.

Содержимое из обычных представлений встроено там, где вы вызываете @RenderBody в файле макета. Как вы можете видеть, вызов RenderBody поступает перед включенными скриптами. Вот почему любой код javascript, который вы пишете, который ссылается на внешний код, не будет работать.

Раздел «Скрипты» определен в файле макета даже после включенных сценариев. Поэтому, если вы используете @section «Scripts», произвольный код, который вы там положите, обязательно появится после включенных js-файлов, и, следовательно, он будет работать.

Надеюсь, теперь это имеет больше смысла.

+0

Да, это проблема. Я на самом деле понял это вчера вечером после некоторых исследований и головы царапин. (Кстати, не нужно обращаться к моему имени @JonathanWood в ответ.) Спасибо. –

+0

Я начал писать комментарий, прежде чем осознать, что он будет слишком длинным и, следовательно, преобразуется в ответ. Починил это. Благодарю. –

2

Похоже, что вы не включили jquery в качестве сценария в свой html-файл. Вы сделали:

<script src="http://cdn.jsdelivr.net/jquery.validation/1.13.1/jquery.validate.min.js"></script> 

Или включить его локально?

+0

У меня нет именно этой строки, но у меня есть '@ Scripts.Render (" ~/bundles/jquery ")' и '@ Scripts.Render (" ~/bundles/jqueryval ")' в верхней части моего макета файл. –

+0

Возможно, что путь к вашему jqueryval неверен, можете ли вы его дважды проверить? –

+0

Моя рендеринговая разметка включает в себя '', и я могу щелкнуть ссылку из браузера, и файл сценария будет выглядеть так, как ожидалось. –