Проверка клиента ASP.NET MVC 3

2

У меня есть следующая модель просмотра:

public class ViewModel
{
    [Display(Name = "firstname", ResourceType = typeof(Views.Validation))]
    public string firstname { get; set; }

    [Required(ErrorMessageResourceName="required", ErrorMessageResourceType = typeof(Views.Validation))]
    [Display(Name="lastname", ResourceType = typeof(Views.Validation))]
    public string lastname { get; set; }

    ...
}

и мое представление HTML:

    ...
<div class="row valid showMsg">
    <div class="itemWrap clearfix">
        <label>@Html.LabelFor(model => model.firstname)<span class="iconReq">&nbsp;</span>:</label>
        @Html.EditorFor(model => model.firstname)
    </div>
    <div class="info">
        <p class="errorMsg">@Html.ValidationMessageFor(model => model.firstname)</p>
        <p class="infoMsg">info message here</p>
        <p class="focusMsg">text on active</p>
    </div>
</div>
...

Если вы заметили в моем представлении HTML, у меня есть <div class="row valid showMsg"> с классом showMsg, который управляет отображением сообщений внутри моего <div class="info">.

Теперь, для проверки сервера, я написал специальный HTML-помощник, который добавляет, что этот класс "showMsg" к div, когда он недействителен:

 public static MvcHtmlString ValidationRowFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression)
 {
     MvcHtmlString normal = html.ValidationMessageFor(expression);

     if (normal != null)
     {
         return MvcHtmlString.Create("errorOn");
     }

     return null;
 }

и используйте его так:

<div class="row valid @Html.ValidationRowFor(model => model.firstname)">

Я хотел бы сделать то же самое для проверки клиента. Так что он автоматически добавит класс showMsg к родительскому объекту при ошибке. Как бы я это сделал?

Спасибо.

Изменить: ok это работает для обычного HTML, но не в MVC3??

$(function(){
 var validator = $(".form").validate({
          highlight: function(element) {
             $(element).parents().closest('div.row').addClass('errorOn');
          },

          unhighlight: function(element) {
             $(element).parents().closest('div.row').removeClass('errorOn');
          }
 });
});
  • 0
    Под валидацией клиента вы имеете в виду jquery или что-то вроде этого, которое поможет вам с проверкой данных и отображением ошибок?
  • 0
    да. Я хотел бы «внедрить» или изменить «jquery.validate.unobtrusive.min.js» новый «Ненавязчивый клиент проверки в ASP.NET MVC 3», чтобы он сделал это для меня автоматически. это означает, что он добавит этот класс для каждой недопустимой записи.
Теги:
validation
asp.net-mvc
asp.net-mvc-3

2 ответа

1
Лучший ответ

Возможно, что-то из строк должно выполнить эту работу:

$(function () {
    $('form').submit(function () {
        $(this).validate().invalidElements().each(function () {
            $(this).closest('div.row.valid').addClass('showMsg');
        });
    });
});
  • 0
    Разве $(document).ready нужен?
  • 1
    @jgauffin, конечно, это то, что делает $(function() { part, это эквивалентно $(document).ready(function() { .
Показать ещё 6 комментариев
1

Если вы используете правила проверки jquery, вы можете сделать что-то вроде этого (я получаю этот код из своего проекта, я изменяю то, что вам нужно, errorClass:

var contactsRules = {
    errorClass: 'showMsg',
    rules: {
        Name: { required: true },
        Surname: { required: true },
        Email: { required: true, email: true }
    },
    messages: {
        Name: {
            required: '<p class="errore">*</p>'
        },
        Surname: {
            required: '<p class="errore">*</p>'
        },
        Email: {
            required: '<p class="errore">*</p>',
            email: '<p class="errore">*</p>'
        }
    }
}

Я предполагаю, что у вас есть форма под названием "контакт", создайте файл js с этим кодом:

$(document).ready(function() {
   var contactRules = ... //The code posted before this
   $('#contact').validate(contactRules);

   $('#contact').submit(function() {
      return $(this).validate();
   });
});

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

  • 0
    где бы я разместил этот код?
  • 0
    Шейн, я обновил пост

Ещё вопросы

Сообщество Overcoder
Наверх
Меню