将多个dbmodel传递给控制器​​的视图

时间:2013-07-15 21:58:30

标签: asp.net-mvc-4

我使用的是ASP.NET MVC 4.

我有这堂课:

namespace Attempt4.Models
{
    public class UsersModel : DbContext
    {
        public UsersModel()
            : base("name=UsersConnection")
        {
        }
       public DbSet<UserProfile> UserProfiles { get; set; }
       public DbSet<Roles> UserRoles { get; set; }
       public DbSet<UsersInRoles> UsersInUserRoles { get; set; }
    }
}

[Table("UserProfile")]
public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }      
}

然后还有另一个课程:

public partial class FskWebInterfaceContext : DbContext
{
    public FskWebInterfaceContext()
        : base("name=FskWebInterfaceContext")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public DbSet<trigger_dest_assoc> trigger_dest_assoc { get; set; }
    public DbSet<ut_AccessLevel> ut_AccessLevel { get; set; }
    public DbSet<ut_Client> ut_Client { get; set; }
    public DbSet<ut_ContactID> ut_ContactID { get; set; }
    public DbSet<ut_destinations> ut_destinations { get; set; }
    public DbSet<ut_DeviceDescription> ut_DeviceDescription { get; set; }
    public DbSet<ut_DeviceType> ut_DeviceType { get; set; }
    public DbSet<ut_event_log> ut_event_log { get; set; }
    public DbSet<ut_GMUTempData> ut_GMUTempData { get; set; }
    public DbSet<ut_Triggers> ut_Triggers { get; set; }
    public DbSet<ut_User> ut_User { get; set; }
    public DbSet<ut_UserAPNdevices> ut_UserAPNdevices { get; set; }
    public DbSet<ut_UserClientLink> ut_UserClientLink { get; set; }
}

现在我需要能够从我的视图中访问这两个数据库上下文。 我知道如何只传递一个模型,例如UserProfile。但我需要能够访问这两个类中的所有元素。

如何将它们从控制器传递到视图。

具体来说,一旦我通过它们,我如何在视图中单独访问它们?

1 个答案:

答案 0 :(得分:2)

您在问题的评论部分有答案:

  

从我读过的内容来看,我需要使用ViewModel类。

所以继续并定义一个包含必要信息的类。然后在您的控制器操作中填充此模型的属性并将其传递给视图。

例如,假设您想要从第一个上下文访问UserProfiles而从第二个上下文访问ut_GMUTempData

public class MyViewModel
{
    public IList<UserProfile> UserProfiles { get; set; }
    public IList<ut_GMUTempData> GMUTempData  { get; set; }
}

并在您的控制器操作中:

public ActionResult Index()
{
    using (var ctx1 = new UsersModel())
    using (var ctx2 = new FskWebInterfaceContext())
    {
        var model = new MyViewModel();
        model.UserProfiles = ctx1.UserProfiles.ToList();
        model.GMUTempData = ctx2.ut_GMUTempData.ToList();
        return View(model);
    }
}

现在您的视图变为对视图模型的强类型,您可以访问这两个属性:

@model MyViewModel
... you could use both @Model.UserProfiles and @Model.GMUTempData collections

更新:

根据评论部分的要求,您可以在视图中循环浏览用户个人资料:

@model MyViewModel
@foreach (var profile in Model.UserProfiles)
{
    <div>@profile.SomePropertyOfTheUserProfileClassThatYouWantToDisplayHere</div>
}