Проверка на стороне клиента ASP.NET MVC 2 RC не работает

Кажется, я не могу получить какую-либо проверку на стороне клиента, работающую над приложением MVC 2 RC.

Моя модель имеет следующее:

public class ExampleModel
{
    [Required(ErrorMessage="Test1 is required")]
    [DisplayName("Test1")]
    public string Test1 { get; set; }

    [Required(ErrorMessage="Test2 is required")]
    [DisplayName("Test2")]
    public string Test2 { get; set; }
}

В моем представлении есть следующий код:

<% Html.EnableClientValidation(); %>
<%= Html.ValidationSummary(true, "Test was unsuccessful.") %>    
<% using (Html.BeginForm()) { %>
<div>
    <div class="editor-label">Test1:</div>
    <div class="editor-field">
        <%= Html.TextBoxFor(m => m.Test1) %>
        <%= Html.ValidationMessageFor(m => m.Test1) %>
    </div>

    <div class="editor-label">Test2:</div>
    <div class="editor-field">
        <%= Html.TextBoxFor(m => m.Test2) %>
        <%= Html.ValidationMessageFor(m => m.Test2) %>
    </div>

    <p>
        <input type="submit" value="Test" />
    </p>
</div>

Я оставляю оба поля пустыми и нажимаю кнопку «Тест», и он переходит прямо к обработчику сообщений контроллера без проверки на стороне клиента. Я не уверен, что мне не хватает.

У меня также есть следующий javascript, включенный в представление (не уверен, что мне все это нужно):

<link href="../../Scripts/jquery-1.3.2.min.js" type="text/javascript" />
<link href="../../Scripts/jquery.validate.min.js" type="text/javascript" />    
<link href="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript" /> 

Любые идеи, что я делаю неправильно. Я чувствую, что мне не хватает чего-то простого, а документация по MVC 2 скудна.

Изменить: я добавил ссылку:

<link href="../../Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript" />

И я включил файл в свой проект, который мне пришлось загрузить по одной из ссылок в ответах. Все еще совсем не работает. Есть другие идеи?

Изменить: я использую Visual Studio 2008 с MVC 2 RC (не бета-версия), и я ищу любые загружаемые или опубликованные примеры проверки на стороне клиента, работающие с выпуском RC. .


person Kelsey    schedule 04.01.2010    source источник


Ответы (5)


При обновлении проекта из бета-версии MVC 2 используйте: /src/MvcFutures/MicrosoftMvcJQueryValidation.js из пакета исходного кода MVC 2 RC (ссылка). Старая бета-версия некорректно работает с jquery.validation в RC. Необходимые файлы javascript:

<script src="/Scripts/jquery-1.3.2.min.js" type="text/javascript" />
<script src="/Scripts/jquery.validate.min-vsdoc.js" type="text/javascript" />
<script src="/Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript" />

Правая версия MicrosoftMvcJQueryValidation.js содержит эту функцию $ (document) .ready ():

// need to wait for the document to signal that it is ready
$(document).ready(function() {
    var allFormOptions = window.mvcClientValidationMetadata;
    if (allFormOptions) {
        while (allFormOptions.length > 0) {
            var thisFormOptions = allFormOptions.pop();
            __MVC_EnableClientValidation(thisFormOptions);
        }
    }
});

в конце файла (в версии RC).

person Martin    schedule 04.01.2010
comment
Я загрузил и включил этот файл точно так же, как и вы, но проверка на стороне клиента все еще не выполняется. Какие-либо рекомендации о том, как я могу диагностировать, что не так? - person Kelsey; 07.01.2010
comment
Попробуйте: 1) проверить, начинается ли часть JS рендеринга страницы с: ..if (! Window.mvcClientValidationMetadata) {.. если нет, введите последовательность: ‹% Html.EnableClientValidation (); % ›Перед BeginForm () 2) попробуйте функцию debug $ (document) .ready () из asnwer выше 3) проверьте, используете ли вы axactly .js, как я описал - person Martin; 12.01.2010

Хорошо, я понял это ... и это на 100% моя вина. Хотя, пара постов содержала некоторую информацию, которая мне тоже нужна.

Основная проблема, которую, к моему удивлению, никто не заметил, заключалась в том, что мой HTML-код включал скрипты ... посмотрите мой пост и посмотрите, видите ли вы проблему.

Я использовал тег <link href=... вместо правильного тега <script src=.... Совершенно моя вина, потому что я быстро вырезал и вставил ссылку CSS, не задумываясь, и просто изменил тип и файл. Ду !!!

В любом случае требуются правильные ссылки:

<script src="/Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script>

Тогда все работает. Вам определенно необходимо включить файл MicrosoftMvcJQueryValidation.js из будущего проекта, поэтому я получаю одобрение за все сообщения, в которых это упоминается.

По умолчанию этот файл НЕ включен. Если вы не беспокоитесь об использовании JQuery, вы можете просто использовать следующие включения, чтобы использовать реализацию Microsoft, которая будет работать с RC сразу из коробки:

<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>    

Я надеюсь, что смогу избавить хотя бы одного человека от горя ... Я до сих пор не могу поверить, как я мог напортачить с включением и не замечать его оооочень долго.

Еще раз спасибо за вашу помощь.

person Kelsey    schedule 07.01.2010

Вы должны включить файл MicrosoftMvcJQueryValidation.js:

<link href="MicrosoftMvcJQueryValidation.js" type="text/javascript" />

Проверьте это: Где находится правильная версия MicrosoftMvcJQueryValidation.js для MVC 2 beta 2?

Затем просто поместите Html.EnableClientValidation(); где-нибудь на странице просмотра. Он должен быть перед первой формой, которую вы хотите проверить на стороне клиента. Я предпочитаю страницу Site.Master.

Работаем над ASP.NET MVC 2 RC.

person Feryt    schedule 04.01.2010

Вы уверены, что включили правильные файлы JS? Поскольку в сообщении Филла Хаака вместо этого прикреплен MicrosoftMvcJQueryValidation.js из MicrosoftMvcValidation.js.

Он также устанавливает свойство ClientValidationFunction в представлении:

<% ViewContext.FormContext.ClientValidationFunction 
= "EnableClientValidation"; %>

Хотя это был не RC, а Beta.

person Çağdaş Tekin    schedule 04.01.2010
comment
<% ViewContext.FormContext.ClientValidationFunction = "EnableClientValidation"; %> больше не работает в RC. Теперь это вызов функции, см .: Html.EnableClientValidation(); - person Kelsey; 05.01.2010

Система проверки по умолчанию (и поддерживается только Microsoft) в версии-кандидате ASP.NET MVC 2 не использует jQuery Validate. Вместо этого он использует новую систему проверки, которая полностью существует в MicrosoftMvcValidation.js (хотя вам также необходимо включить MicrosoftAjax.js).

Если вы хотите использовать библиотеку jQuery Validate, она включена как часть проекта ASP.NET MVC Futures (доступен здесь), который загружается отдельно и имеет собственный файл сценария адаптера.

Кроме того, что касается помощника Html.ValidationSummary(), я считаю, что его необходимо включить в форму, если вы хотите, чтобы он имел новые функции на стороне клиента. Он по-прежнему будет работать, если он находится вне формы, но он будет работать только на стороне сервера.

person Eilon    schedule 04.01.2010
comment
Привет, я не согласен (-1). ASP.NET MVC RC поддерживает (как писал Фил Хаак в своем блоге) любую совместимую платформу проверки на стороне клиента и сервера. Для клиентского сайта это jQuery.validate, а для серверной - xVal, Castle и т. Д. Html.ValidationSummary () не обязательно должен быть внутри формы, он может быть где угодно на странице. - person Feryt; 04.01.2010
comment
Под «поддерживаемым» я имел в виду «поддерживаемый Microsoft», и мое утверждение верно. Единственный встроенный поставщик проверки клиента в ASP.NET MVC 2 RC предназначен для новой библиотеки проверки, а не для jQuery. Вы можете подключить другие библиотеки - они просто не поддерживаются Microsoft. - person Eilon; 04.01.2010