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 という 2 つのモデル

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>

しかし、私は User モデルから日付を取得しているだけで、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 に答える