Я работаю над веб-приложением с использованием ASP MVC. Я создаю страницу для редактирования данных пользователя (модель USER, представление ModifyUser).
У меня есть модель с проверками таким образом:
[MetadataType(typeof(USERS_Metadata))]
public partial class USER
{
public class USERS_Metadata
{
[Required(ErrorMessage = "FALTA NOMBRE")]
[StringLength(30, ErrorMessage = "Nombre entre 3 y 30 caracteres", MinimumLength = 3)]
[RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$", ErrorMessage = "Error en el formato del nombre.")]
public string NAME { get; set; }
Затем я использую представление, которое автоматически проверяет вводимые пользователем данные:
<div class="editor-label">
<%: Html.LabelFor(model => model.SURNAME) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.SURNAME) %>
<%: Html.ValidationMessageFor(model => model.SURNAME) %>
</div>
Проблема в том, что на мой взгляд также потребуется доступ к некоторым другим объектам с их собственными моделями, например USERCATEGORY, что делает использование строго типизированного представления немного более неудобным.
Кроме того, и это может быть даже более важно, я не хочу, чтобы мое представление имело дело с такими свойствами, как идентификатор сеанса пользователя, и даже зная о них, которые в настоящее время я обрабатываю следующим образом (и я ненавижу это):
<%: Html.HiddenFor(model => model.SESSIONID) %>
Если я не ошибаюсь, наиболее разумным вариантом является создание собственной модели ViewModel. Я решил создать свою ModifyUserViewModel, чтобы соответствовать этим полям в USER, которые мне понадобятся в моем представлении, и добавить несколько полей из других моделей ... Но я понятия не имею, как распространять метаданные в USER, которые я использую для проверки поля в новую модель просмотра. Эти метаданные автоматически создаются из базы данных, и их копирование заставит меня почувствовать себя мертвым внутри, даже если это сработает.
Каков канонический, наиболее удобный и простой способ проверки из представления, как я делаю сейчас, но с помощью ViewModel?