Вопрос

Кажется, я не могу получить какую-либо проверку на стороне клиента, работающую в приложении 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>

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

У меня есть следующий 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.

Это было полезно?

Решение 2

Хорошо, я с этим разобрался...и это на 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' из проекта futures, поэтому я проголосовал против всех сообщений, в которых упоминалось это.

Из коробки, хотя этот файл НЕ включен.Если вы не беспокоитесь об использовании jQuery, то вы можете просто использовать следующие includes для использования реализации 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>    

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

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

Другие советы

Когда вы обновляете проект с бета-версии 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 содержит это $(документ).готово() функция:

// 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-версии).

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

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

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

Далее просто положите Html.EnableClientValidation(); где-то на странице просмотра.IT должен находиться перед первой формой, которую вы хотите проверить на стороне клиента.Я предпочитаю Сайт.Мастер Страница.

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

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

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

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

Хотя это был не RC, а бета-версия.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top