2012-06-21 2 views
0

Я ищу, чтобы сделать основной вид детали..net MVC Master Detail View со связанными записями

У меня есть два стола tbFamily и tbFamilyMember.

В настоящее время я могу просмотреть данные о семье и перечислить связанных членов семьи, однако я хочу отделить членов семьи от их роли. т. е. я хочу отобразить список родителей/опекунов, а затем список детей, упорядоченных по дате рождения.

Мои модели заключаются в следующем:

public class tbFamily 
{ 
    public int tbFamilyID { get; set; } 
    public string Surname { get; set; } 
    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string Address3 { get; set; } 
    public string Town { get; set; } 
    public string County { get; set; } 
    public string Postcode { get; set; } 
    public string Country { get; set; } 
    public string Telephone { get; set; } 
    public string Mobile { get; set; } 
    public string Email { get; set; } 

    public virtual ICollection<tbFamilyMember> tbFamilyMember { get; set; } 
    public virtual ICollection<tbFamilyData> tbFamilyData { get; set; } 
} 

public class tbFamilyMember 
{ 
    public int tbFamilyMemberID { get; set; } 
    public int tbFamilyID { get; set; } 
    public int Role { get; set; } 
    public string Firstname { get; set; } 
    public string Surname { get; set; } 
    public char Gender { get; set; } 

    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)] 
    public DateTime DateOfBirth { get; set; } 

    public virtual tbFamily tbFamily { get; set; } 
} 

Мой контроллер в настоящее время выглядит следующим образом:

public ActionResult Details(int id = 0) 
    { 
     tbFamily tbfamily = db.tbFamily.Find(id); 
     if (tbfamily == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(tbfamily); 
    } 

связанный с ним Посмотреть

@Html.DisplayFor(model => model.Surname) 
@Html.DisplayFor(model => model.Address1) 
@Html.DisplayFor(model => model.Address2) 
@Html.DisplayFor(model => model.Address3) 
@Html.DisplayFor(model => model.Town) 
@Html.DisplayFor(model => model.County) 
@Html.DisplayFor(model => model.Postcode) 
@Html.DisplayFor(model => model.Country) 
@Html.DisplayFor(model => model.Telephone) 
@Html.DisplayFor(model => model.Mobile) 
@Html.DisplayFor(model => model.Email) 

@foreach (var item in Model.tbFamilyMember) 
{ 
    @Html.DisplayFor(modelItem => item.Firstname) 
    @Html.DisplayFor(modelItem => item.Surname) 
    @Html.DisplayFor(modelItem => item.Role) 
} 

Получить Детей:

public ActionResult GetChildren(int id) 
{ 
    var tbFamilyData = from f in db.tbFamilyMember 
         where f.tbFamilyID.Equals(id) 
         where f.Role.Equals(3) 
         select f; 
     return View(tbFamilyData); 
} 

связанный с ним Вид:

@foreach (var item in Model.tbFamilyData) 
{ 
    @Html.DisplayFor(modelItem => item.tbFamilyMember.Firstname) 
    @Html.DisplayFor(modelItem => item.tbFamilyMember.Surname) 
    @Html.DisplayFor(modelItem => item.tbFamilyMember.Role) 
} 

Просто не знаю, как получить два работают вместе!

Я создал отдельную модель tbFamilyData

public class tbFamilyData 
{ 
    public virtual tbFamily tbFamily { get; set; } 
    public virtual tbFamilyMember tbFamilyMember { get; set; } 
} 

теперь я получаю ошибку tbFamilyData не имеет ключа определен.

Надеясь, что кто-то может помочь.

ответ

0

Я хотел бы предложить один из двух вариантов:

1) создать ViewModels, что лучше представлять свои взгляды, и заполнить их в контроллер (мой предпочтительный раствор).

public class FamilyViewModel 
{ 
    public string Surname { get; set; } 
    ... // other props 

    public ICollection<FamilyMemberViewModel> Parents { get; set; } 
    public ICollection<FamilyMemberViewModel> Children { get; set; } 
} 

2) использовать методы Linq с вашей точки зрения, чтобы фильтровать данные для отображения

<h1>Parents</h1> 
@foreach (var item in Model.tbFamilyMember.Where(x => x.Role == Roles.Parent)) 
{ 
    ... 
} 

<h1>Children</h1> 
@foreach (var item in Model.tbFamilyMember.Where(x => x.Role == Roles.Child) 
              .OrderBy(x => x.DateOfBirth)) 
{ 
    ... 
} 
+0

спасибо Дэйв! Работает отлично. – Stephen

Смежные вопросы