2010-05-14 2 views
0

Возможно ли частичное представление наследовать более одной модели? У меня есть три модели (Контакты, Клиенты, Поставщики), которые имеют адресную информацию (Адрес). В интересах DRY я вытащил адресную информацию в свою собственную модель, Addresses. Я создал частичное представление для создания/обновления адресов и что это сделать в других трёх представлениях создания/обновления.ASP.NET MVC Generic Partial

ответ

2

Вместо использования комбинированной модели просмотра вы все еще можете быть СУХОЙ и иметь три вида (Контакты, Клиенты, Поставщики). Если вас беспокоит повторение себя при отображении информации о адресе, просто создайте шаблон отображения для этого типа. Таким образом, вы можете написать всю конкретную информацию для каждого контакта клиента и поставщика в своих собственных взглядах и просто падение:

<%= Html.DisplayFor(m => m.Address) %> 

Теперь вы быть DRY, поддерживая при этом едином принципе ответственности.

Подробнее о шаблонах для отображения и редактирования можно посмотреть на Brad Wilson или Phil Haack сообщений на нем.

+0

Не 'Html.DisplayFor()' функция ASP.NET MVC 2? – Nate

+0

@Nate Bross Да, это так. –

+0

Хороший ответ и ссылки. Обязательно прочитайте об этом! – gnome

0

Как насчет создания новой модели, содержащей все три модели (Контакты, Клиенты, Поставщики). Затем передайте эту новую модель в частичную. Оттуда вы можете получить доступ ко всем трем моделям от вашей новой модели.

+0

Я не думаю, что он должен отображать их все одновременно. Он создал представление, которое используется для рендеринга адреса, и теперь хочет сделать вызов, чтобы отобразить его из представлений «Контакты/Клиенты/Поставщики». – R0MANARMY

+0

Вначале у меня было все три модели в одном, но их информация была достаточно уникальной, и было разумно их разделить. Я согласен с тем, что это было бы легче. – gnome

0

Я считаю, что единственный способ сделать это с помощью модели композиционный вид (что не обязательно плохо), так что-то вроде:

public class MyControllerActionViewModel 
{ 
    public IList<Contact> Contacts { get; set; } 
    public IList<Client> Clients { get; set; } 
    public IList<Vendor> Vendors { get; set; } 
} 

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

Надеюсь, что это поможет!

+0

Есть ли эхо здесь? – Gabe

+0

только альфа-мужчины, к сожалению;) –

+0

не имеет значения, так как ни один из вас не дал правильный ответ – R0MANARMY