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 没有任何内容。所以我可以看到用户名、电子邮件和卷,但看不到名字或姓氏。

你能看出我哪里出错了吗?

谢谢

4

2 回答 2

3

删除线

user.UserDetails = new UserDetails();

这样做,您将创建一个新的空UserDetails实例。

并且user.UserDetails来自您的上下文的内容被那个空实例所取代。

编辑

可能更好地避免 NRE

user.UserDetails = user.UserDetails ?? new UserDetails();
于 2012-10-10T15:41:01.020 回答
0

不要使用 user.UserDetails = new UserDetails() 它将详细信息从 db 更改为新的详细信息。您可以在 linq 请求中获取您的视图模型:

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);
    }
于 2012-10-11T06:39:39.737 回答