2014-04-22 161 views
1

我设法注册一个applicationuser,现在我想提出一个HTTP GET请求,它在View中显示当前登录用户的账户详细信息。为什么我的嵌套CustomerViewModel为空?

但是,当我运行应用程序并转到“MyPages”视图时,出现异常,表明嵌套的CustomerViewModel为空。我完全不知道为什么,但出于某种原因。

这是HomeController.cs的ActionResult的

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; } 
    } 
} 

这是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; } 
    } 
} 

似乎是什么问题这里?

+0

CustomerViewModel是更换您的UserViewModel Model类null,你必须声明像 ** var userViewModel = new UserViewModel(); ** –

回答

2

我可能在代码中丢失了某些东西,但它看起来并不像CustomerViewModeluserViewModel.CustomerViewModel实例化。

你可以节省一些麻烦,让UserViewModel为您创建一个新的实例:

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

    public CustomerViewModel CustomerViewModel { get; set; } 
} 
+0

这确实有窍门。谢谢! – Assassin87

0

请与下面的代码

公共类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; } 
}