ASP.NET MVC Създаване на изглед за обект с първи дъщерен обект

Имам обект „Person“, който има свойството „FirstName“ и „LastName“. „Човекът“ също има 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.

Това има ли смисъл или не съм в основата?

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