мне было интересно, если кто-то может мне помочь с построением моей модели представления ...Как построить сложный вид модель
У меня есть три родительские модели, пользователи, профили и проекты
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>
}
}
Я попытался это, но он не работает ... –
о, возможно, необходимо включать дочерние таблицы в вашем заявлении LINQ. 'Projects = projects.Include (« ProjectDownloads »). Где (p => p.ProfileID == profile.ProfileID)'. – 360Airwalk
Пробовал это прямо сейчас, тоже не работал ... Просто так вы знаете, таблицы Project Child, то есть ProjectDownloads ... У них нет поля с именем ProfileID, просто ProjectID –