MVC3 Проверка на стороне клиента не работает - PullRequest
9 голосов
/ 16 января 2011

Я использую MVC3 с Razor.
Я включил в свой _Layout.cshtml следующее:

<script src="@Url.Content("~/Scripts/jquery.validate.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>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>  

Моя форма выглядит так:

  @{
       ViewBag.Title = "Register"; 
       Html.EnableClientValidation();
   }  
   @using (Html.BeginForm("Register"))
   {
      <fieldset>
        <p>
            @Html.LabelFor(o => o.Email)
            @Html.TextBoxFor(o => o.Email)
            @Html.ValidationMessageFor(o => o.Email)
        </p>
  ...
 </fieldset>
}

МойViewModel имеет DataAnnotations (и реализует IValidatableObject), и он проверяется во время действия контроллера.Однако я не могу использовать проверку JS на клиентской стороне без публикации формы.

Что мне не хватает?

Ответы [ 3 ]

29 голосов
/ 16 января 2011

В ASP.NET MVC 3 плагин проверки jquery используется по умолчанию для выполнения проверки на стороне клиента. Таким образом, вы можете удалить все Microsoft*.js скрипты из вашего проекта. Вам нужно только следующее:

<script src="@Url.Content("~/Scripts/jquery-1.4.4.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

и удалите вызов Html.EnableClientValidation();. Проверка клиента включена в web.config:

<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
1 голос
/ 19 февраля 2011

Попробуйте добавить следующие строки в ваше представление.

HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;

Наряду с включением jquery-1.4.4.js, jquery.validate.js, jquery.validate.unobtrusive.js

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

[Required(ErrorMessageResourceType = typeof(Resources.WValidation), ErrorMessageResourceName = "TestCountRequired")]
        [Range(1, Int32.MaxValue, ErrorMessageResourceType = typeof(Resources.WValidation), ErrorMessageResourceName = "TestCountRange")]
        public int? TestCountThreshold { get; set; }

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

1 голос
/ 16 января 2011

Удалите Html.EnableClientValidation (); и зайдите в веб-конфигурацию и убедитесь, что у вас есть appSetting, который выглядит следующим образом:

<add key="ClientValidationEnabled" value="true"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...