Измените заголовки таблицы на
<th>@Html.ActionLink("Name", "Index", "Home", new { SortParameter = "Name", SortOrder = Model.SortOrder }, null)</th>
<th>@Html.ActionLink("Name", "Index", "Home", new { SortParameter = "Age", SortOrder = Model.SortOrder }, null)</th>
, а затем измените метод контроллера для переключения SortOrder
public ActionResult Index(SortModel model)
{
var docs = db.GetDocs();
if(model.SortParameter == "Age" && model.SortOrder == "desc")
{
docs.OrderByDescending(x => x.Age);
model.SortOrder == "acs"
}
return View(model);
}
Обратите внимание, что, вероятно, было бы проще, если бы у вас был bool IsAscending
свойство, а не string SortOrder
.
Однако у вас есть только одно свойство 'SortOrder', поэтому, если текущее представление отображает документы, отсортированные по Name
в порядке возрастания, и пользователь нажимает Age
, то документы будут отсортированы по Age
в порядке возрастания.Если пользователь затем нажимает на Name
, Документы будут отсортированы по Name
в порядке убывания.Вы не указали, почему требуется такое поведение, но вы могли бы добавить несколько свойств 'SortOrder', скажем
public bool IsNameAscending { get; set; }
public bool IsAgeAscending { get; set; }
, чтобы справиться с этим, а также позволить вам использовать .ThenBy()
в вашем запросе, дляпример
docs.OrderBy(x => x.Age).ThenBy(x=> x.Name);
Вы также можете визуализировать визуальный индикатор (например, стрелки вверх или вниз), чтобы указать текущий порядок сортировки для пользователя.