Asp.Net MVC EnableClientValidation не работает

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

Модель: (Модель имеет DataModel (dbml), которая содержит тестовый класс)

namespace MyProject.TestProject
{
    [MetadataType(typeof(TestMetaData))]
    public partial class Test
    {

    }

    public class TestMetaData
    {
        [Required(ErrorMessage="Please enter a name.")]
        [StringLength(50)]
        public string Name { get; set; }
    }
}

Контроллер ничего особенного.

Вид:

<% Html.EnableClientValidation(); %>
<% using (Ajax.BeginForm("Index", "Test", FormMethod.Post, 
            new AjaxOptions {}, new { enctype = "multipart/form-data" }))
   {%>
   <%= Html.AntiForgeryToken()%>
    <fieldset>
        <legend>Widget Omschrijving</legend>
        <div>
            <%= Html.LabelFor(Model => Model.Name) %>
            <%= Html.TextBoxFor(Model => Model.Name) %>
            <%= Html.ValidationMessageFor(Model => Model.Name) %>
        </div>
    </fieldset>
    <div>
        <input type="submit" value="Save" />
    </div>
 <% } %>

Чтобы все это работало, я также добавил ссылки на файлы js:

<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>
<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>

В конце концов он должен работать, но он не работает на 100%: он проверяет без обновления страницы после нажатия кнопки. Он также выполняет «половину» проверки на стороне клиента. Только когда вы вводите какой-либо текст в текстовое поле, а затем возвращаете набранный текст. Появится проверка на стороне клиента. Но когда я пытаюсь это сделать, нажимая между элементами управления, проверка на стороне клиента отсутствует.

Я пропустил какую-то ссылку или что-то в этом роде? (Я использую Asp.Net MVC 2 RTM)


person Colin    schedule 23.03.2010    source источник


Ответы (3)


Изменить порядок загруженного javascript...

<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<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 Andrew Flanagan    schedule 16.07.2010
comment
Вот проверка включена на мою страницу. Однако проверка клиента вообще не работает, вы видите проблему? - person Shimmy Weitzhandler; 11.07.2013

Я тоже думал, что что-то упустил, но я знаю, что подключаемый модуль проверки jQuery не реагирует на mouseEnter/mouseLeave. Согласно документации для этого подключаемого модуля (на странице подключаемого модуля — найдите раздел с пометкой «Несколько вещей, на которые стоит обратить внимание при игре с демо»):

Прежде чем поле будет помечено как недействительное, проверка выполняется лениво: перед отправкой формы в первый раз пользователь может перемещаться по полям, не получая надоедливых сообщений — он не будет получать ошибки до того, как у него появится возможность ввести правильное значение.

Я предполагаю, что это то же самое правило с проверкой на стороне клиента MVC 2. Я не могу быть в этом уверен, потому что в документации ничего не сказано, кроме «это работает на моей машине» :).

Я выбрал маршрут проверки jQuery, который поддерживается в MVC Futures. (обратите внимание, что документации для этого не существует). Чтобы использовать его, вам просто нужно заменить теги script для файлов MicrosoftAjax.js, MicrosoftMvcAjax.js и MicrosoftMvcValidation.js на эти два тега:

<script src="/js/jquery.validate.js" type="text/javascript"></script>
<script src="/js/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script>

заменив путь на свой.

Я также обнаружил необходимость обновления до последней версии jquery.validate.js со страницы разработчика, потому что здесь мы используем более позднюю версию jQuery (1.4).

Надеюсь, это поможет.

person Tim Rourke    schedule 23.03.2010
comment
Я изменил свой код с тем, что вы описываете, но никаких улучшений. Я использую: jQuery 1.4.2 jQuery-validate 1.7 MicrosoftMvcJQueryValidation нет доступного номера версии. Я также изменил ссылку внутри файла MicrosoftMvcJQueryValidation .js на /// ‹reference path=jquery-1.4.2.js /› , но никаких улучшений. - person Colin; 24.03.2010

хм... уже поздно отвечать, но попробуй так:

<script src="<%= Url.Content("ScriptFile.js") %>" type="text/javascript"></script>
person Sadegh    schedule 20.06.2010