Я использую веб-приложение MVC 5, EF 6, Code First в Visual Studio 2013 Pro отсюда: http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application
Я хотел бы объединить представление, которое имеет функцию подкачки, а также имеет возможность отображать связанные данные из ViewModel.
В указанном выше веб-приложении представление Student Index (ViewResult в контроллере) имеет функции разбиения на страницы и сортировки и не использует ViewModel.
В том же приложении представление Instructor Index (ActionResult в контроллере) не имеет функций разбиения по страницам и сортировки, но отображает связанные данные (курсы) с помощью «Select» Html.ActionLink на той же странице, что и Instructor. Индексные данные.
Мне нравится представление «Студент», которое предоставляет функции разбиения по страницам и сортировки, а также мне нравится представление «Инструктор», которое позволяет отображать связанные данные на существующей странице индекса, но я не знаю, как их объединить.
Кто-нибудь знает, как я могу добавить функцию пейджинга в представление Instructor Index, сохраняя при этом возможность отображать связанные данные на той же странице просмотра Index?
Другой способ задать тот же вопрос: как добавить разбиение по страницам и сортировку в представление Instructor Index, сохраняя при этом возможность отображения связанных данных?
Любая помощь будет принята с благодарностью.
Спасибо, Тони
Вот метод Index из InstructorController.cs:
public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page)
{
ViewBag.CurrentSort = sortOrder;
ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";
if (searchString != null)
{
page = 1;
}
else
{
searchString = currentFilter;
}
ViewBag.CurrentFilter = searchString;
var instructors = from i in db.Instructors
select i;
if (!String.IsNullOrEmpty(searchString))
{
instructors = instructors.Where(i => i.LastName.ToUpper().Contains(searchString.ToUpper())
|| i.FirstMidName.ToUpper().Contains(searchString.ToUpper()));
}
switch (sortOrder)
{
case "name_desc":
instructors = instructors.OrderByDescending(i => i.LastName);
break;
case "Date":
instructors = instructors.OrderBy(i => i.HireDate);
break;
case "date_desc":
instructors = instructors.OrderByDescending(i => i.HireDate);
break;
default: // Name ascending
instructors = instructors.OrderBy(i => i.LastName);
break;
}
int pageSize = 3;
int pageNumber = (page ?? 1);
return View(instructors.ToPagedList(pageNumber, pageSize));
}
Вот начало кода представления для Instructor/Index.cshtml:
@model PagedList.IPagedList<LakesidePurchasing.ViewModels.InstructorIndexData>
@using PagedList.Mvc;
<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />
@{
ViewBag.Title = "Instructors";
}
<h2>Instructors</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>Last Name</th>
<th>First Name</th>
<th>Hire Date</th>
<th>Office</th>
<th>Courses</th>
<th></th>
</tr>
@foreach (var item in Model)
{
string selectedRow = "";
if (item.ID == ViewBag.InstructorID)
{
selectedRow = "success";
}
<tr class="@selectedRow">
<td>
@Html.DisplayFor(model => Model.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.FirstMidName)
</td>
<td>
@Html.DisplayFor(modelItem => item.HireDate)
</td>
<td>
@if (item.OfficeAssignment != null)
{
@item.OfficeAssignment.Location
}
</td>
InstructorIndexData
, но вместо свойстваIEnumerable<Instructor> Instructors
вы используетеPagedList.IPagedList<Instructor> Instructors
и назначаете свойinstructors.ToPagedList(pageNumber, pageSize) to it
- person markpsmith   schedule 27.11.2014InstructorIndexData
, вам нужно будет изменить элементы управления представлением, чтобы они получали доступ к свойствамInstructor
. Что-то вроде:@Html.DisplayFor(model => model.Instructors.LastName)
- person markpsmith   schedule 28.11.2014InstructorIndexData
. - person markpsmith   schedule 01.12.2014