ASP.NET MVC Создать представление для объекта с первым дочерним объектом

У меня есть объект «Человек», который имеет свойства «Имя» и «Фамилия». «Человек» также имеет отношение 1-n с объектом «Телефон». Объект «Телефон» имеет свойство «Номер». Таким образом, у человека может быть несколько телефонных номеров.

В «PersonController» у меня есть действие «Создать», которое загружает строго типизированное представление, чтобы показать форму, в которой я могу создать нового «Человека». Но помимо свойств человека я также хочу иметь возможность вводить первый дочерний объект телефона.

Эти коды дают мне исключение NullReferenceException:

Html.TextBox("Number", Model.Person.Phones.SingleOrDefault().Number)

В моем методе действия я вызываю представление следующим образом:

Dim p As New Person
Return View(p)

Итак, как я могу создать объект и первый дочерний объект в одном представлении?


person Stief Dirckx    schedule 27.10.2009    source источник
comment
Если вы передаете Person в качестве своей модели, ваш код не должен читать Model.Phones.SingleOrDefault().Number   -  person Nicholas Murray    schedule 27.10.2009
comment
Я использовал Model.Person.Phones.SingleOrDefault().Number. Это компилируется, но выдает ошибку во время выполнения.   -  person Stief Dirckx    schedule 27.10.2009


Ответы (1)


Разве это не потому, что объект номера телефона не был установлен и на самом деле является нулевым?

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

эээ вот так я (думаю) и мой VB ржавый;

Dim p as New person
Dim pp as new Phones
p.Phones.Add (pp)
return View(p)

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

Вы могли бы сделать это лучше, реорганизовав приведенный выше код в создание объекта Person, чтобы всегда был новый объект Phone, прикрепленный к новому человеку.

Это имеет смысл или я не в теме?

person griegs    schedule 27.10.2009
comment
Да, это кажется правильным, поскольку вы создаете объект Person, вы также создаете объект Null Phone, пока он не будет заполнен, как указано выше. - person Nicholas Murray; 28.10.2009
comment
Вы даже можете добавить код, который создает и добавляет этот первый объект телефона pp в ваш конструктор/инициализацию класса... Таким образом, каждый раз, когда вы создаете экземпляр нового человека, вы будете знать, что эта первая ссылка на телефон всегда будет для вас . - person Funka; 28.10.2009
comment
Спасибо, я думал, что SingleOrDefault() создаст новый объект, если совпадений нет. Теперь я изменил свой конструктор Perosn, как предложил Funka. - person Stief Dirckx; 28.10.2009