Почему мой вложенный CustomerViewModel null?

Мне удалось зарегистрировать приложение-приложение, и теперь я хотел бы сделать HTTP-запрос GET, который отображает текущие зарегистрированные данные учетной записи пользователя в представлении.

Однако, когда я запускаю приложение и перехожу к представлению "MyPages", я получаю исключение, говорящее, что вложенный CustomerViewModel имеет значение null. Я понятия не имею, почему, но почему-то это так.

Это actionresult в HomeController.cs

public ActionResult MyPages()
{ string userId = User.Identity.GetUserId(); var currentUser = _userRepository.GetById(userId); var customer = _customerRepository.GetById(currentUser.Customer.Id); var userViewModel = new UserViewModel(); userViewModel.Id = currentUser.Id; userViewModel.UserName = currentUser.UserName; //This is where the exception occurs. Apperantly CustomerViewModel is null userViewModel.CustomerViewModel.Id = customer.Id; userViewModel.CustomerViewModel.FirstName = customer.FirstName; userViewModel.CustomerViewModel.LastName = customer.LastName; userViewModel.CustomerViewModel.Email = customer.Email; return View(userViewModel);
}

Это UserViewModel

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using Microsoft.AspNet.Identity.EntityFramework;
namespace GUI.Models
{ public class UserViewModel { public virtual string Id { get; set; } public virtual string UserName { get; set; } public virtual string PasswordHash { get; set; } public virtual string SecurityStamp { get; set; } public virtual ICollection<identityuserrole> Roles { get; set; } public virtual ICollection<identityuserclaim> Claims { get; set; } public virtual ICollection<identityuserlogin> Logins { get; set; } public CustomerViewModel CustomerViewModel { get; set; } }
}
</identityuserlogin></identityuserclaim></identityuserrole>

И это CustomerViewModel:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using ClassLibrary.Entities;
namespace GUI.Models
{ public class CustomerViewModel { public Guid Id { get; set; } [Required] [Display(Name = "First Name")] public string FirstName { get; set; } [Required] [Display(Name = "Last Name")] public string LastName { get; set; } [Display(Name = "Email Adress")] [Required(ErrorMessage = "Email address is required")] [EmailAddress(ErrorMessage = "Invalid Email Address")] public string Email { get; set; } public List<invoiceviewmodel> InvoiceViewModels { get; set; } public List<addressviewmodel> AdressViewModels { get; set; } public AddressViewModel AdressViewModel { get; set; } public virtual ICollection<invoice> Invoice { get; set; } public virtual ICollection<adress> Adress { get; set; } }
}
</adress></invoice></addressviewmodel></invoiceviewmodel>

В чем проблема?

2 ответа

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

Вы можете сэкономить немного хлопот и позволить UserViewModel создать для вас новый экземпляр:

public class UserViewModel
{ public UserViewModel() { CustomerViewModel = new CustomerViewModel(); } public CustomerViewModel CustomerViewModel { get; set; }
}


Пожалуйста, замените класс UserViewModel Model следующим кодом

public class UserViewModel

{ public virtual string Id { get; set; } public virtual string UserName { get; set; } public virtual string PasswordHash { get; set; } public virtual string SecurityStamp { get; set; } public UserViewModel() { CustomerViewModel = new CustomerViewModel(); } public CustomerViewModel CustomerViewModel { get; set; }
}

licensed under cc by-sa 3.0 with attribution.