2012-03-08 3 views
0

мне было интересно, если кто-то может мне помочь с построением моей модели представления ...Как построить сложный вид модель

У меня есть три родительские модели, пользователи, профили и проекты

On A вид, я хотел бы передать модель, которая имеет информацию пользователя, их информацию о профиле, и их информационные проекты ...

до сих пор мой взгляд модели выглядит следующим образом ...

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace ProDevPortMVC3.ViewModels 
{ 
    public class PortfolioViewModel 
    { 
     public int ProfileID { get; set; } 
     public int UserID { get; set; } 
     public string ProfileFirstName { get; set; } 
     public string ProfileLastName { get; set; } 
     public string ProfileEmail { get; set; } 
     public Nullable<long> ProfileContactNo { get; set; } 
     public string ProfileCity { get; set; } 
     public string ProfileState { get; set; } 
     public string ProfileCountry { get; set; } 
     public string ProfilePhotoPath { get; set; } 
     public string ProfilePhotoName { get; set; } 
     public string ProfileBio { get; set; } 
     public string ProfileMissionStatement { get; set; } 
     public string ProfilePrivacySetting { get; set; } 
     public IEnumerable<ProfileBlog> ProfileBlogs { get; set; } 
     public IEnumerable<ProfileForum> ProfileForums { get; set; } 
     public IEnumerable<Project> Projects { get; set; } 
    } 
} 

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

ProjectCodeSamples ProjectDownloads ProjectScreenShots ProjectTechnologiesUseds

Вот мой метод действий контроллера до сих пор ...

public ActionResult Index(int id) 
{ 
    var profile = db.Profiles.SingleOrDefault(p => p.UserID == id); 
    var profileBlogs = db.ProfileBlogs.Where(p => p.ProfileID == profile.ProfileID); 
    var profileForums = db.ProfileForums.Where(p => p.ProfileID == profile.ProfileID); 
    var projects = db.Projects.Where(p => p.ProfileID == profile.ProfileID); 
    var viewModel = new PortfolioViewModel 
    { 
     ProfileFirstName = profile.ProfileFirstName, 
     ProfileLastName = profile.ProfileLastName, 
     ProfileEmail = profile.ProfileEmail, 
     ProfileContactNo = profile.ProfileContactNo, 
     ProfileCity = profile.ProfileCity, 
     ProfileState = profile.ProfileState, 
     ProfileCountry = profile.ProfileState, 
     ProfilePhotoPath = profile.ProfilePhotoPath, 
     ProfilePhotoName = profile.ProfilePhotoName, 
     ProfileBio = profile.ProfileBio, 
     ProfileMissionStatement = profile.ProfileMissionStatement, 
     ProfilePrivacySetting = profile.ProfilePrivacySetting, 
     ProfileBlogs = profileBlogs.Where(p => p.ProfileID == profile.ProfileID), 
     ProfileForums = profileForums.Where(p => p.ProfileID == profile.ProfileID), 
     Projects = projects.Where(p => p.ProfileID == profile.ProfileID) 
    }; 
    return View(viewModel); 
} 

Итак, как же я по-прежнему или что мне делать здесь?

EDIT: я забыл добавить, что таблицы проекта по уходу за детьми имеют внешний ключ ProjectID, которые соединяют их к столу проектов ...

Вот окончательный Просмотр кода для его работы ...

@foreach (var item in Model.Projects) 
{ 
    <p> 
    @Html.DisplayFor(modelItem => item.ProjectName) 
    </p> 

    foreach (var subItem in item.ProjectDownloads) 
    { 
     <pre> 
     @Html.DisplayFor(modelItem => subItem.ProjectDownloadPath) 
     </pre> 
    } 
} 

ответ

0

Поскольку вы используете модель Project в своей модели ViewModel, вы можете просто получить доступ к дочерним таблицам проекта в представлении.

Например, вы должны быть в состоянии сделать следующее:

foreach(var item in model.Projects) 
{ 
    foreach(var download in item.ProjectDownloads) 
    { 
     ... 
    } 
} 
+0

Я попытался это, но он не работает ... –

+0

о, возможно, необходимо включать дочерние таблицы в вашем заявлении LINQ. 'Projects = projects.Include (« ProjectDownloads »). Где (p => p.ProfileID == profile.ProfileID)'. – 360Airwalk

+0

Пробовал это прямо сейчас, тоже не работал ... Просто так вы знаете, таблицы Project Child, то есть ProjectDownloads ... У них нет поля с именем ProfileID, просто ProjectID –

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