ViewModel问题

时间:2012-10-09 15:52:07

标签: asp.net-mvc ef-code-first

我正在努力让我的ViewModel工作以查看详细信息。我有它创建一个新的记录,但只是无法弄清楚如何只是查看已注册的数据。

我有两个型号

用户(包含UserName,Password,email等常规内容)然后 -

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 Register方法中我有

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表中。

我的问题是再次检索数据以显示在“用户/索引”页面上。这应该显示每个注册用户的Users和UserDetails的详细信息。我已经尝试了许多不同的东西来使它工作,但不断收到错误。我已经浏览了asp.net mvc网站上的书籍和示例应用程序,但找不到任何与此类似的关于1:1关系的示例。我认为在使注册部分工作之后,这将是一个简单的部分,但我看不出如何做到这一点。

在我的用户控制器中,我需要传入一个viewModel吗?或者我只是在Index方法中设置viewModel然后传递给视图?我尝试在这里设置视图模型没有成功,认为它类似于帐户控制器中的设置,但无论我尝试什么,我都会收到错误。

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

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

    }
}

但我不知道这是否正确。

然后在User控制器的Index方法中我有 -

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

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

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

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

由于

1 个答案:

答案 0 :(得分:0)

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