ASP.Net MVC2 - установка значений ViewModel с использованием извлеченных из объекта db значений с помощью DataAnnotations - PullRequest
0 голосов
/ 09 января 2011

До использования ViewModel я мог легко передать объект «скоро будет отредактирован» непосредственно в представление без необходимости суетиться над настройкой отдельных свойств и т. Д., Так как представление удобно принимало тип Employee напрямую.

    [HttpGet]
    public ActionResult EditEmployee(int? id)
    {
        EmployeeRepository ER = new EmployeeRepository();
        Employee SomeEmployee = ER.GetEmployee(id.Value);

        if(SomeEmployee!=null)
            return View(SomeEmployee);

Но теперь я использую ViewModel с атрибутами DataAnnotations, примененными поверх различных свойств для целей проверки.Что создает проблему ..

После извлечения объекта «скоро будет отредактировано» из БД, установка значений ViewModel внезапно становится намного сложнее.Я не могу просто передать полученный объект прямо в представление, поскольку представление теперь ожидает тип VMEmployee.

Я хотел бы иметь возможность сделать что-то вроде:

    [HttpGet]
    public ActionResult EditEmployee(int? id)
    {
        EmployeeRepository ER = new EmployeeRepository();
        Employee SomeEmployee = ER.GetEmployee(id.Value);

        if(SomeEmployee!=null)
            return View(new VMEmployee(SomeEmployee));

Кажется, что все пути ведут к огромному конструктору, который вручную устанавливает значения каждого отдельного свойства.Но мне никогда не приходилось делать это раньше, когда я не использовал ViewModel.Привязка модели была благословением!

У моих объектов также есть сложные дочерние объекты, для которых моя форма также собирает значения, так что это будет огромной / многословной задачей для принципалов DRY.

Я не понимаюдаже не хочу использовать ViewModel, но вынужден, потому что мне нужны два разных набора правил DataAnnotations для разных сценариев проверки, применяемых к одному и тому же объекту.

Все, что я хочу сделать, - это иметь возможность иметь два разныхНаборы правил DataAnnotations для разных сценариев.Т.е. общедоступный www-сайт против внутреннего админ-сайта.Кажется, DataAnnotations недостаточно гибки, чтобы легко удовлетворить эту общую потребность.

Я пробовал AutoMapper, но выдает ошибку, говорящую, что он не может сопоставить типы моих объектов, я подозреваю, что Employee был auto-произведенный LINQ to SQL.

Какой самый элегантный способ достичь этого при соблюдении принципа DRY?

1 Ответ

0 голосов
/ 09 января 2011

Я бы определил класс отображения, единственной целью которого будет сопоставление Employee с VMEmployee.Отображение все еще должно существовать, но в идеале модель представления не должна быть заинтересована в этом.Затем вы можете выполнить модульное тестирование, чтобы убедиться, что все сопоставлено.

Для облегчения этого вы можете использовать что-то вроде Automapper .Тем не менее, я склонен считать, что написание кода отображения вручную становится проще.

WhoCanHelpMe дает пример того, как реализовать это с Automapper, используя приличную структуру ООП и IOC.

...