Тип данных модели и контроль вида - PullRequest
1 голос
/ 14 января 2010

У меня возникли небольшие проблемы, когда я обдумываю шаблон проектирования MVC, когда тип данных свойства модели сильно отличается от того, что я хочу отобразить в форме. Я не уверен, куда должна идти логика.

Понимая, что я не совсем уверен как задать вопрос, я думаю, что я объясню это как конкретный пример.

У меня есть таблица счетов со второй таблицей, содержащей InvoiceDetails. Каждый из предметов InvoiceDetail имеет владельца, который отвечает за утверждение оплаты. В данном счете есть один или несколько человек, которые в конечном итоге подпишутся во всех строках сведений, чтобы счет мог быть утвержден. Веб-сайт создается для обеспечения функциональности одобрения.

В базе данных хранится идентификатор сотрудника, который утвердил позицию. Эта схема предоставляет мне модель со свойством String для столбца Approved.

Однако на веб-сайте я хочу предоставить сотруднику флажок, чтобы подтвердить, что он одобрил позицию.

Полагаю, мой вопрос в следующем - как мне с этим справиться? Модель, передаваемая в представление, имеет свойство String, но значение формы, передаваемое обратно в контроллер, будет иметь тип CheckBox. Я вижу два возможных пути ...

1) Создайте новый объект Model для представления полей формы ... скажем что-то вроде FormInvoiceDetails ... и попросите бизнес-логику запросить базу данных, а затем преобразовать результаты в другой тип. Затем после отправки значения формы необходимо преобразовать обратно, чтобы можно было обновить исходные объекты модели.

2) Передайте исходную коллекцию InvoiceDetails в представление и создайте там код для визуализации CheckBox на основе значения свойства String. Я все еще не уверен, как обрабатывать отправку, поскольку мне все еще нужно сопоставить значения формы с базовым объектом базы данных.

Может быть, есть третий путь, если не один из этих двух подходов?

Чтобы сделать ситуацию немного сложнее (а может, и нет), я отрисовываю форму, позволяющую редактировать несколько строк (т. Е. Коллекцию).

Спасибо за любые идеи, которые кто-либо может предоставить.

Ответы [ 2 ]

2 голосов
/ 14 января 2010

Вам нужен ViewModel, как предлагает @ Justn Niessner .

Ваш контроллер загружает полную модель из базы данных, копирует только необходимые поля в ViewModel, а затем передает ViewModel в представление для визуализации.

Я бы использовал Automapper , чтобы сделать преобразование из Модели в ViewModel. Он автоматизирует весь утомительный код thingA.x = thingY.x;.

Вот еще одно сообщение в блоге, подробно описывающее использование ViewModels в образце Nerd Dinner .

1 голос
/ 14 января 2010

Я считаю, что вы ищете ViewModel.

В тех случаях, когда вы используете ViewModel, вы проектируете ViewModel так, чтобы он точно соответствовал данным, которые необходимо отобразить на вашей странице.

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

Пример Nerd Dinner ASP.NET MVC содержит несколько очень хороших примеров использования ViewModels.

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