Asp. Сетевой 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. Сетевой MVC 2 RTM)

14
задан Frank Shearar 9 November 2010 в 16:53
поделиться

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>

У меня была точно такая же проблема, и это помогло мне ее решить...

5
ответ дан 1 December 2019 в 16:24
поделиться

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

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

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

Я выбрал маршрут проверки jQuery, который поддерживается в MVC Futures (обратите внимание, что документации для этого не существует). Чтобы использовать его, вам просто нужно заменить теги сценария для файлов 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).

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

1
ответ дан 1 December 2019 в 16:24
поделиться

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

<script src="<%= Url.Content("ScriptFile.js") %>" type="text/javascript"></script>
1
ответ дан 1 December 2019 в 16:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: