4

Если у меня есть класс, похожий на этот:Если мне нужно получить объект из привязки настраиваемой модели, если связующее взаимодействует с уровнем обслуживания, уровнем репозитория или ...?

public class Person 
{ 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
    public Pet myPet { get; set; } 
} 

При создании пользовательской модели связующего, то сообщение от моей формы не будет посылать в Пет, она посылала в такие данные: Имя: " myFirstName "lastName:" myLastName "myPet:" myPetsName "

Поскольку имя Pet передано, а не фактический объект Pet, объект Pet должен быть извлечен из связующего объекта модели.

Мой вопрос заключается в том, должен ли связующее устройство взаимодействовать с уровнем обслуживания, уровнем хранилища, или даже если оно будет получать Pet? Проблема с Service Layer, что я, кажется, не имеют доступа к ModelState при инициализации службы: ((this.ModelState) дает мне ошибку)

_petService = new PetService(new ModelStateWrapper(this.ModelState)); 

Если мне нужна модель связующего, чтобы создать Объект Person, тогда Pet нужно будет каким-то образом назначить ... как я должен это делать?

ответ

2

Я использую модель представления/презентации вместо привязки к бизнес-объектам. Помните, что ваши пользователи могут вводить недопустимые значения, и вам нужно будет повторно отобразить эти недопустимые значения пользователю, когда они попросят их исправить свои ошибки. Но ваши «реальные» бизнес-объекты, вероятно, не будут принимать недопустимые значения. Таким образом, модель представления должна учитывать любой пользовательский ввод, даже входные бизнес-объекты не будут приниматься.

Это упрощает привязку. Вам не нужно удалять репозиторий для привязки, только при обновлении бизнес-объекта с (действительным) пользователем.

+0

Как вы утверждаете, вы создаете объект PetBinding с кучей открытых строк? –

+0

Правильно ... так что если я хочу сделать вызов Ajax для метода контроллера, я не должен связывать его? Но это делает его намного более чистым: public ActionResult Create (Person personToCreate) {} Вместо фактического прохождения параметров ... Я знаю, что представление должно принимать любые данные, но до тех пор, пока вход проверяется до форма представляется, это не должно быть проблемой. Итак, что именно вы предлагаете мне делать? Когда я должен попасть в репозиторий? И если проверка должна быть на уровне службы, тогда я не должен взаимодействовать с этим? – Matt

+0

Джеймс, не обязательно строки. Любой связующий тип будет работать. Но модель представления обычно «плоская», чем бизнес-объект, поскольку она структурирована как представление. –