Почему мой вложенный 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.