Проверка на стороне клиента не работает со вспомогательными свойствами в ASP.NET MVC 2? - PullRequest
2 голосов
/ 02 марта 2010

У меня есть объект с именем Пользователь , со свойством Имя , с атрибутом Обязательный .

public class User
{
     public int Id { get; set; }

     [Required]
     public string Name { get; set; }
}

Я создал текстовое поле, вот так:

<%= Html.TextBoxFor(model => model.Name) %>

При включении проверки на стороне клиента Имя идеально проверяется на стороне клиента.

Однако, если я создам ViewModel, где User теперь является свойством

public class UserModel
{
     public User TheUser { get; set; }
     public string SomeOtherProperty { get; set; }
}

и создай мое текстовое поле

<%= Html.TextBoxFor(model => model.TheUser.Name) %>

тогда проверка на стороне клиента завершится неудачно. Форма публикуется без проверки клиента, обнаружив ошибку.

Похоже на javascript window.mvcClientValidationMetadata заполняется, как и раньше, без заметной разницы.

Что дает? Что-то мне нужно сделать?

Я использую

  • ASP.NET MVC 2 RC2 (с .NET 3.5 / VS2008)
  • MicrosoftMvcJQueryValidation.js из последней загрузки Futures

Edit:

При ближайшем рассмотрении window.mvcClientValidationMetadata не заполняется должным образом. Правила валидации не указаны:

{"FieldName":"TheUser.Name","ReplaceValidationMessageContents":true,"ValidationMessageId":"TheUser_Name_validationMessage","ValidationRules":[]}

1 Ответ

0 голосов
/ 30 июля 2011

Вы должны создать шаблон редактора для вашего класса User. Загрузите это с Html.EditorFor (model => model.User, "User"), где "User" - это имя вашего шаблона редактора.

Пользовательский класс должен быть моделью представления для этого шаблона редактора.

Затем в шаблоне редактора для пользователя вызовите шаблоны редактора для его свойств.

Проверка клиента из коробки MVC должна корректно работать с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...