2012-10-10 51 views
0

我有一個名爲RegisterViewModel視圖模型 -視圖模型沒有顯示相關數據

public class RegisterViewModel 
    { 
     public string UserName { get; set; } 
     public string Email { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
} 

和兩個型號稱爲User和的UserDetails

public class User 
    { 
     [Key] 
     public string UserName { get; set; } 
     public string Email { get; set; } 

     public virtual ICollection<Role> Roles { get; set; } 
     public virtual UserDetails UserDetails { get; set; } 
} 


public class UserDetails 
    { 

     [Key] 
     public string UserName { get; set; } 
     public string Firstname { get; set; } 
     public string Lastname { get; set; } 

     [Required] 
     public virtual User User { get; set; } 
} 

在我的用戶控制器我已經在我的細節如下方法 -

public ViewResult Details(string id) 
     { 
      User user = context.Users 
       .Include (i => i.UserDetails) 
       .Where(i => i.UserName == id) 
       .Single(); 

      user.UserDetails = new UserDetails(); 

      RegisterViewModel viewModel = new RegisterViewModel{ 
       UserName = user.UserName, 
       FirstName = user.UserDetails.FirstName, 
       LastName = user.UserDetails.LastName, 
       Salary = user.UserDetails.Salary, 
       Email = user.Email, 
       Roles = user.Roles 
      }; 
      return View(viewModel); 
     } 

在我的詳細信息視圖 -

@model TRS.ViewModels.RegisterViewModel 
<table> 
<tr> 
    <td>User Name</td> 
    <td>@Model.UserName</td> 
</tr> 
<tr> 
    <td>Email</td> 
    <td>@Model.Email</td> 
</tr> 
<tr> 
    <td>First Name</td> 
    <td>@Model.FirstName</td> 
</tr> 
<tr> 
    <td>Last Name</td> 
    <td>@Model.LastName</td> 
</tr> 
<tr> 
    <td>Roles</td> 
    <td>@foreach (Role role in Model.Roles) { 
     @role.RoleName<br /> 
    }</td> 
</tr> 

但我只是從用戶模型獲取日期,沒有UserDetails。所以我可以看到用戶名,電子郵件和羅爾,但不是第一個或最後一個名字。

你能看到我在這裏出錯了嗎?

感謝

回答

3

刪除行

user.UserDetails = new UserDetails(); 

這樣做,你創建一個新的空UserDetails實例。

而來自您的上下文的user.UserDetails被該空實例取代。

編輯

可能更好地避免NRE

user.UserDetails = user.UserDetails ?? new UserDetails(); 
0

不要使用user.UserDetails =新的UserDetails()將其更改從數據庫到新的細節信息。您可以在linq請求中獲得您的viewmodel:

public ViewResult Details(string id) 
    { 
     var viewmodel = context.Users 
      .Where(i => i.UserName == id) 
      .Select(user=>new RegisterViewModel 
       { 
        UserName = user.UserName, 
        FirstName = user.UserDetails.FirstName, 
        LastName = user.UserDetails.LastName, 
        Salary = user.UserDetails.Salary, 
        Email = user.Email, 
        Roles = user.Roles 
       }) 
      .Single(); 


     return View(viewModel); 
    }