Вам необходимо создать ViewModel, который будет использоваться для хранения информации от каждой сущности, которая вам нужна в вашем фактическом представлении.
Например, у меня есть контроллер PublicationsController, который будет создавать страницу каталога в моей сети.приложение.Один ActionResult должен предоставить ViewModel с именем PublicationsListViewModel для моего View.
PublicationsListViewModel:
public class PublicationsListViewModel
{
public IList<Publication> Publications { get; set; }
public PagingInfo PagingInfo { get; set; }
public String CurrentCategory { get; set; }
public Dictionary<String, String> SelectedItems { get; set; }
}
Как вы можете видеть, PublicationsListViewModel - это просто контейнер для каждой сущности, который необходимо передать в мое представление.
Мой PublicationsController выглядит следующим образом:
Контроллер:
public ActionResult List(Cart cart, string category, int page = 1)
{
Dictionary<String, String> selectedItems = new Dictionary<String, String>();
foreach (var line in cart.Lines)
{
selectedItems.Add(line.Publication.PDFID.ToString(), line.Quantity.ToString());
}
foreach (var line in cart.Lines)
{
ViewData.Add(line.Publication.PDFID.ToString(), line.Quantity.ToString());
}
var publicationsToShow = (category == null)
? publicationsRepository.Publications
: publicationsRepository.Publications.Where(x => x.Category.Equals(category, StringComparison.CurrentCultureIgnoreCase));
var viewModel = new PublicationsListViewModel
{
Publications = publicationsToShow.Skip((page - 1) * PageSize).Take(PageSize).ToList(),
PagingInfo = new PagingInfo
{
CurrentPage = page,
ItemsPerPage = PageSize,
TotalItems = publicationsToShow.Count()
},
CurrentCategory = category,
SelectedItems = selectedItems
};
return View(viewModel); // Passed to view as ViewData.Model (or simply Model)
}
И мой вид выглядит следующим образом
Вид:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<myNameSpace.WebUI.Models.PublicationsListViewModel>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Publications : <%: Model.CurrentCategory ?? "All Publications" %>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<%
foreach (var publication in Model.Publications)
{
Html.RenderPartial("PublicationSummary", publication, ViewData);
}
%>
<div class="pager">
<%: Html.PageLinks(Model.PagingInfo, x => Url.Action("List", new { page = x, category = Model.CurrentCategory }))%>
</div>
</asp:Content>