I like this approach because it makes the code in my view simple - basically I have @foreach for answers nested inside @foreach for questions.
. , Display Temapltes? # , , , , :
public class QuestionViewModel
{
public int VotesToday { get; set; }
public int VotesThisWeek { get; set; }
public int TotalVotes { get; set; }
public IEnumerable<ResponseViewModel> { get; set; }
}
IEnumerable<QuestionViewModel> , :
@model IEnumerable<AppName.Models.QuestionViewModel>
@Html.DisplayForModel()
~/Views/Shared/DisplayTemplates/QuestionViewModel.cshtml
@model AppName.Models.QuestionViewModel
<div>@Model.VotesToday</div>
<div>@Model.VotesThisWeek</div>
<div>@Model.TotalVotes</div>
@Html.DisplayFor(x => x.ResponseViewModel)
~/Views/Shared/DisplayTemplates/ResponseViewModel.cshtml:
@model AppName.Models.ResponseViewModel
<div>@Model.Body</div>
.
:
public class QuestionsController: Controller
{
private readonly IQuestionsRepository _repository;
public QuestionsController(IQuestionsRepository _repository)
{
_repository = repository;
}
public ActionResult Index()
{
IEnumerable<Question> model = _repository.GetQuestions();
IEnumerable<QuestionViewModel> viewModel = Mapper
.Map<IEnumerable<Question>, IEnumerable<QuestionViewModel>>(model);
return View(viewModel);
}
}
, EF - , . , , ( ).
, AutoMapper ( Mapper.Map<TSource, TDest> ).
, : . , , , .