ASP.NET MVC 2 Использование интерфейса для строгого ввода частичного - PullRequest
1 голос
/ 23 марта 2011

Я экспериментирую с ASP.NET MVC2, в частности с моделями представления и частями.У меня вопрос: действительно ли это 'правильно' или 'правильно', если ваши частичные данные строго типизированы для интерфейса, и ваши модели представления реализуют этот интерфейс, если представление использует частичное?

Чтобы проиллюстрировать, скажем, у меня естьЧастичная форма продукта (строго типизированная для IProductFormViewModel), которая используется в представлениях «Редактировать» и «Создать».Эти представления строго типизированы для ProductEditViewModel и ProductCreateViewModel, которые реализуют IProductFormViewModel.

Преимущество заключается в том, что соответствующие действия POST для объектов Create и Edit принимают объекты ProductCreateViewModel и ProductEditViewModel соответственно.Если частичное имеет свою собственную выделенную модель представления (ProductFormViewModel) и каждый из ProductEditViewModel & ProductCreateViewModel предоставляет свойство типа ProductFormViewModel, которое передается частичному, то при отправке формы привязка модели ProductEditViewModel & ProductCreateViewModel не работает какДействия редактирования и создания ожидают соответствующих им типов объектов ... вот в чем причина подхода.

Ответы [ 4 ]

0 голосов
/ 24 марта 2011

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

В противном случае это должно работать.

0 голосов
/ 23 марта 2011

Интерфейсы - это, по сути, контракты, которые должны выполняться путем реализации классов.но в случае с механизмами просмотра я не вижу особой пользы от того, что ваши модели представления реализуют интерфейс, потому что в конце вы должны создать экземпляр модели представления в контроллере и передать его представлению, и предположим, что вы меняете реализацию ProductFormViewModel или EditProductViewModel,все еще должен создать экземпляр (заполнить) объект в контроллере и передать его в представление.поэтому он не достигает той же цели, что и в шаблоне репозитория в сочетании с внедрением зависимостей.Если вы можете сказать, чего именно вы пытаетесь достичь этим подходом, мы можем помочь.

0 голосов
/ 23 марта 2011

Ваш подход в порядке.

Или вы могли бы иметь модель, специфичную для вашего партиала, и использовать вместо этого композицию, например:

public class AddressModel
{
    public string Address { get; set; }
    public string Code { get; set; }
}

public class PersonModel
{
    public string Name { get; set; }
    public AddressModel Address { get; set; }
}

Затем, при повторном воспроизведении партиала, вы передаете его правильномодель.

HTH

0 голосов
/ 23 марта 2011

Да, похоже, правильный подход.

...