Asp.Net MVC EnableClientValidation не работает - PullRequest
14 голосов
/ 23 марта 2010

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

Модель: (Модель имеет модель данных (dbml), которая содержит класс Test)

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)

Ответы [ 3 ]

5 голосов
/ 16 июля 2010

Изменить порядок загруженного 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>

У меня точно такая же проблема, и это прояснило ее для меня ...

1 голос
/ 20 июня 2010

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

<script src="<%= Url.Content("ScriptFile.js") %>" type="text/javascript"></script>
1 голос
/ 23 марта 2010

Я тоже думал, что что-то упустил, но знаю, что плагин проверки 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).

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

...