0

我正在努力让我的 ViewModel 工作以查看详细信息。我让它用于创建新记录,但无法弄清楚如何简单地查看已注册的数据。

我有两个模型

用户(包含用户名、密码、电子邮件等常规内容),然后 -

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

与 UserDetails 存在 1:1 关系,其中仅包含一些附加项目,如 FirstName、LastName 和

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

然后我有一个名为 RegisterViewModel 的 ViewModel,其中包含来自 User 和 UserDetails 的必要注册详细信息。

在我的 AccountController 注册方法中,我有

MembershipCreateStatus createStatus = MembershipService.CreateUser(viewModel.UserName, viewModel.Password, viewModel.Email);

                if (createStatus == MembershipCreateStatus.Success)
                {
                    TRSContext context = new TRSContext();
                    //FormsService.SignIn(model.UserName, false /* createPersistentCookie */);

                    User newuser = context.Users
                        .Include(i => i.UserDetails)
                        .Where(i => i.UserName == viewModel.UserName)
                        .Single();
                    newuser.UserDetails = new UserDetails();

                    Role adminRole = context.Roles.Find("User");
                    newuser.Roles = new List<Role>();
                    newuser.Roles.Add(adminRole);

                    newuser.UserDetails.Firstname = viewModel.FirstName;
                    newuser.UserDetails.Lastname = viewModel.LastName;
                    newuser.UserDetails.Address1 = viewModel.Address1;
                    newuser.UserDetails.Address2 = viewModel.Address2;
                    newuser.UserDetails.City = viewModel.City;
                    newuser.UserDetails.Postcode = viewModel.Postcode;
                    newuser.UserDetails.Country = viewModel.Country;

                    context.SaveChanges();

这一切都很好,我可以注册一个新用户,并将数据存储在 User 和 UserDetails 表中。

我的问题是再次检索数据以显示在用户/索引页面上。这应该显示每个注册用户的用户和用户详细信息的详细信息。我尝试了许多不同的方法来使其正常工作,但不断出现错误。我浏览了 asp.net mvc 站点上的书籍和示例应用程序,但找不到任何具有 1:1 关系的示例。我认为在注册部分工作之后,这将是简单的部分,但我不知道如何做到这一点。

在我的 Index 用户控制器中,我需要传入 viewModel 吗?还是我只是在 Index 方法中设置 viewModel 然后传递给视图?我尝试在此处设置视图模型但没有成功,认为它与帐户控制器中的设置类似,但无论我尝试什么都会出错。

编辑 - 我尝试添加一个名为 UserDetaisData 的新 ViewModel,它只包含 -

namespace TRS.ViewModels
{
    public class UserDetailsData
    {
        public IEnumerable<User> User { get; set; }
        public IEnumerable<UserDetails> UserDetails { get; set; }

    }
}

但我不知道这是否是正确的做法。

然后在用户控制器的 Index 方法中,我有 -

public ViewResult Index()
        {
            var viewModel = new UserDetailsData();

因为我认为我需要实例化一个可以发送回视图的新视图模型。

然后我可以选择 viewModel.User = 和 viewModel.UserDetails = 。这是我应该做的吗?我可以从这两个模型中检索数据,然后将所有数据发送回新视图模型中的视图吗?

任何人都可以给我建议或指出一个类似案例的例子吗?

谢谢

4

1 回答 1

0

您可以创建一个新的视图模型来显示您想要显示的所有数据,然后将其传递给视图(结合来自您的用户和 UserDetails 实体的相关字段)。或者,您可以传递带有用户 ID 参数的 HTML 部分以显示用户详细信息。

于 2012-10-09T15:57:17.260 回答