Примечание 1: Использование синтаксиса Razor для разметки и C # в качестве кода ServerSide.
Примечание 2: Основные сведения о настройке для сортировки получены из Сортировка, Фильтрация и разбиение по страницам с помощью Entity Framework Tutorial , но мне нужно было больше контроля и рычагов, чем они предоставили для их простого примера.
Итак ...
Вотпредставление с конечным результатом для таблицы
Представление по умолчанию http://cognitivegenerationenterprises.net/cgeCorp/Images/Toggling-MVC-Grid/defaultGrid3.png
Вот мой код ServerSide в действии индекса (то есть, когда загружается моя страница) (снова, см. Ссылку выше для получения дополнительной информации)
public ViewResult Index(string sortOrder)
{
// Set the defaults
ViewBag.FirstNameSortParam = "First Name desc";
ViewBag.LastNameSortParam = "Last Name desc";
ViewBag.CitySortParam = "City desc";
ViewBag.StateSortParam = "State desc";
ViewBag.DOBSortParam = "DOB desc";
var students = from s in db.Students select s;
switch (sortOrder)
{
case "First Name desc":
students = students.OrderByDescending(s => s.FirstName);
ViewBag.FirstNameSortParam = sortOrder;
break;
case "First Name asc":
students = students.OrderBy(s => s.FirstName);
ViewBag.FirstNameSortParam = sortOrder;
break;
case "Last Name desc":
students = students.OrderByDescending(s => s.LastName);
ViewBag.LastNameSortParam = sortOrder;
break;
case "Last Name asc":
students = students.OrderBy(s => s.LastName);
ViewBag.LastNameSortParam = sortOrder;
break;
case "City desc":
students = students.OrderByDescending(s => s.StudentAddress.City);
ViewBag.CitySortParam = sortOrder;
break;
case "City asc":
students = students.OrderBy(s => s.StudentAddress.City);
ViewBag.CitySortParam = sortOrder;
break;
case "State desc":
students = students.OrderByDescending(s => s.StudentAddress.State);
ViewBag.StateSortParam = sortOrder;
break;
case "State asc":
students = students.OrderBy(s => s.StudentAddress.State);
ViewBag.StateSortParam = sortOrder;
break;
case "DOB desc":
students = students.OrderByDescending(s => s.DOB);
ViewBag.DOBSortParam = sortOrder;
break;
case "DOB asc":
students = students.OrderBy(s => s.DOB);
ViewBag.DOBSortParam = sortOrder;
break;
default:
students = students.OrderByDescending(s => s.StudentID);
break;
}
return View(students.ToList());
}
При первом запуске, конечно, sortOrder будет нулевым.Однако шаблон ниже демонстрирует, как я выполнил переключение столбца «Фамилия».Кроме того, обратите внимание, что я установил в качестве первого состояния по умолчанию значение «По убыванию».В качестве альтернативы вы можете перевернуть его, если хотите, чтобы Ascending был зарегистрирован в качестве первого состояния, когда пользователь нажимает на ссылку.Для моих целей лучше всего работает «По убыванию».
@{
string fnSort = ViewBag.FirstNameSortParam;
string lnSort = ViewBag.LastNameSortParam;
string citySort = ViewBag.CitySortParam;
string stateSort = ViewBag.StateSortParam;
string dobSort = ViewBag.DOBSortParam;
}
<table>
<tr>
<th>
@{
if (fnSort != "First Name desc")
{
fnSort = "First Name desc";
}else{
fnSort = "First Name asc";
}
}
@Html.ActionLink("First Name", "Index", new { sortOrder = fnSort })
</th>
<th>
@{
if (lnSort != "Last Name desc")
{
lnSort = "Last Name desc";
}else{
lnSort = "Last Name asc";
}
}
@Html.ActionLink("Last Name", "Index", new { sortOrder = lnSort })
</th>
<th>
Email
</th>
<th>
Phone Number
</th>
<th>
@{
if (citySort != "City desc")
{
citySort = "City desc";
}else{
citySort = "City asc";
}
}
@Html.ActionLink("City", "Index", new { sortOrder = citySort })
</th>
<th>
@{
if (stateSort != "State desc")
{
stateSort = "State desc";
}else{
stateSort = "State asc";
}
}
@Html.ActionLink("State", "Index", new { sortOrder = stateSort })
</th>
<th>
@{
if (dobSort != "DOB desc")
{
dobSort = "DOB desc";
}else{
dobSort = "DOB asc";
}
}
@Html.ActionLink("DOB", "Index", new { sortOrder = dobSort })
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@Html.DisplayFor(modelItem => item.PhoneNumber)
</td>
<td>
@Html.DisplayFor(modelItem => item.StudentAddress.City)
</td>
<td>
@Html.DisplayFor(modelItem => item.StudentAddress.State)
</td>
<td>
@Html.DisplayFor(modelItem => item.DOB)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.StudentID }) |
@Html.ActionLink("Details", "Details", new { id=item.StudentID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.StudentID })
</td>
</tr>
}
</table>
Вот и все ... Переключение теперь работает для «Фамилии» ... теперь я буду реализовывать переключение сортировки и для других столбцов
Надеюсь, это поможет.Дайте мне знать, если вам нужна дополнительная помощь!Я с гордостью помогаю (если смогу)
Ура!