ASP.NET MVC 2 проверка на стороне клиента не работает для Html.ValidationMessage ()? - PullRequest
1 голос
/ 11 апреля 2010

Я пытаюсь получить очень простой пример проверки на стороне клиента для работы в ASP.NET MVC 2. Я использую аннотации данных для установки обязательного свойства "Фамилия". Когда я использую Html.ValidationMessageFor (x => x.Surname), на страницу записывается правильный сценарий проверки на стороне клиента. Но когда я использую Html.ValidationMessage («Фамилия»), проверка на стороне клиента не выполняется до тех пор, пока страница не будет опубликована. Проверка на стороне клиента начинает работать только после публикации формы! Я вижу, что скрипт обновляется на странице после публикации формы. Кажется, есть ошибка в Html.ValidationMessage ()?

Ответы [ 3 ]

2 голосов
/ 12 апреля 2010

Убедитесь, что вы ссылаетесь на правильные сценарии в заголовке главной страницы.

<script src="<%= Url.Content("~/Scripts/MicrosoftAjax.js") %>" type="text/javascript"></script>
<script src="<%= Url.Content("~/Scripts/MicrosoftMvcAjax.js") %>" type="text/javascript"></script>
<script src="<%= Url.Content("~/Scripts/MicrosoftMvcValidation.js") %>" type="text/javascript"></script>

также посмотрите на ваше мнение, чтобы убедиться, что вызов проверки клиента выше вашей формы

<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm()) {%>
    <%= Html.ValidationSummary(true) %>
    ...
<% } %>

и, конечно, ваше сообщение для подтверждения проблемы.

<span class="editor-label"><%= Html.ValidationMessageFor(u => u.Name)%></span>

Это действительно все, что тебе нужно. Я считаю, что обязательный атрибут начнет свою проверку только в том случае, если вы введете текст в поле, а затем удалите текст и вкладку из поля, поэтому попробуйте это, чтобы убедиться, что вы получили подтверждение. Другие будут проверять, когда атрибут должен. Например, [StringLength(50)] будет отображать сообщение об ошибке, если вы превысите 50 символов.

0 голосов
/ 12 апреля 2010

Насколько я знаю, проверка требует попытки проверки, даже если она на стороне клиента.

Вы можете попробовать в представлении GET создать новый экземпляр вашей модели, а затем использовать TryValidateModel () перед отправкой его в представление. Это должно привести к запуску логики проверки и, таким образом, к заполнению проверки на стороне клиента, что приведет к тому, что все обязательные поля будут отображать версию ошибки, но в зависимости от того, как вы решите их оформить, это не должно быть большой проблемой.

0 голосов
/ 11 апреля 2010

Я не пробовал, но метаданные хранятся в свойствах, поэтому только ValidationMessageFor может проверять свойства (с помощью статического отражения).

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

...