Как проверить соответствие метаданных модели с помощью пользовательской модели просмотра?

Я работаю над веб-приложением с использованием 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?


person jesusiniesta    schedule 10.01.2014    source источник
comment
Зачем нужно прикреплять то, что скрыто за sessionId? Вы где-нибудь его используете?   -  person Marcin Wachulski    schedule 10.01.2014
comment
Если я этого не сделаю, после отправки он жалуется, что sessionId не может быть нулевым (он пытается проверить всю модель).   -  person jesusiniesta    schedule 10.01.2014


Ответы (1)


Попробуйте построить свою модель представления как совокупность нескольких моделей предметной области:

public class MyViewModel {
    public USER User { get; set; }
    public USERCATETORY Category { get; set; }
}

См. Отличную статью здесь .

person Marcin Wachulski    schedule 10.01.2014