使用EF在MVC 4局部视图上显示相关实体

时间:2014-02-21 13:30:17

标签: c# asp.net-mvc entity-framework asp.net-mvc-4

我正在研究asp.net MVC 4应用程序。我有一个这样的视图模型:

  public class MainViewModel
    {
        public List<EmailAccount> EmailAccounts { get; set; }
        public List<UserContact> Contacts { get; set; }
        public List<LinkedInProfile> LinkedInProfiles { get; set; } 

        public IConfig Config { get; set; }
    }

联系人和LinkedInProfiles有很多关系,所以我定义了联结表:

 public class LinkedInAccountConnection
    {
       [Key]
       [Column(Order = 0)]
       public Guid LinkedInAccountId { get; set; }
       [Key]
       [Column(Order = 1)]
       public string LinkedInProfileId { get; set; }
     }

在视图中我正在使用它:

@foreach (var c in Model.Collection.Contacts.OrderByDescending(c => c.LastUpdated).Take(500))
    {
        @Html.Action("ContactListWidget", "Account", new { contact = c })
    }

EF代码

var user = dataRepository.GetUserByUsername(username);
Contacts = dataRepository.GetContactsAll(user.Item.UserID).Where(c => c.UserContactEmailAddresses.All(e=> !Cleansing.IsAutomatedEmailAddress(e.EmailAddress))).ToList();

foreach (var c in Contacts)
{
    var userContactToLinkedInProfiles = c.UserContactToLinkedInProfiles;

    foreach (var uc in userContactToLinkedInProfiles)
    {
        var profile = uc.LinkedInProfile;
        LinkedInProfiles.Add(profile);
    }
}

我想在ContactListWidget部分视图中显示与联系人相关的信息以及相关的LinkedInProfile。我需要对Viewmodel进行哪些更改并进行查看?

请建议。

1 个答案:

答案 0 :(得分:0)

您只需填写ViewModel,然后将其绑定到您的视图。

<强>控制器

[HttpGet]
public ActionResult GetDetails()
{

       var mainViewModel = new MainViewModel();

        mainViewModel.EmailAccounts=Repository.GetEmailAccounts();
        mainViewModel.Contacts=Repository.GetUserAccounts();
        mainViewModel.LinkedInProfiles=Repository.GetLinkedInProfiles(); 
        mainViewModel.Config=Repository.GetConfigData();

     return PartialView("ContactListWidget", mainViewModel );
}

查看

@model YourProject.ViewModels.MainViewModel  //set your viewmodel here

之后,您可以使用ViewModel的列表数据绑定到其他html元素。

如果您愿意,可以阅读我撰写的关于"How to Use ViewModel with ASP.NET MVC"的文章以获取更多信息。

效果提醒: @foreach (var c in Model.Collection.Contacts.OrderByDescending(c => c.LastUpdated).Take(500))

  • 请不要将所有数据放入视图中,然后在内部进行过滤 view.Just只带过滤过的数据(即过滤内部的数据) 存储库)。它将有助于提高视图的性能。