我遵循此Tutorial在MVC ASP.Net中实现一个表,允许用户过滤和搜索作业列表,并允许他们编辑和添加新闻作业。
到目前为止,这是我的代码,我已经从教程中略微修改了它以满足我的需求:
@model IEnumerable<JMWebApp.Models.Job>
@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "Job Manager";
}
<p>
<a asp-action="Create">Create New</a>
</p>
<table class="table-bordered">
<thead>
<tr>
<th>
<a asp-controller="Home" asp-action="Index" asp-route-sortOrder="@ViewData["IdSortParam"]">@Html.DisplayNameFor(model => model.Id)</a>
</th>
<th>
<a asp-controller="Home" asp-action="Index" asp-route-sortOrder="@ViewData["ReferenceSortParam"]">@Html.DisplayNameFor(model => model.Reference)</a>
</th>
</tr>
</thead>
<tbody>
@foreach (var job in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => job.Id)
</td>
<td>
@Html.DisplayFor(modelItem => job.Reference)
</td>
</tr>
}
</tbody>
</table>
这是我的C#:
public ActionResult Index(string sortOrder)
{
var filteredJobs = ReturnJob();
ViewData["IdSortParam"] = string.IsNullOrEmpty(sortOrder) ? "id_desc" : "";
ViewData["ReferenceSortParam"] = sortOrder == "Reference" ? "reference_desc" : "Reference";
switch (sortOrder)
{
case "id_desc":
filteredJobs = filteredJobs.OrderByDescending(j => j.Id).ToList();
break;
case "Reference":
filteredJobs = filteredJobs.OrderBy(j => j.Reference).ToList();
break;
case "reference_desc":
filteredJobs = filteredJobs.OrderByDescending(j => j.Reference).ToList();
break;
default:
filteredJobs = filteredJobs.OrderBy(j => j.Id).ToList();
break;
}
return View(filteredJobs);
}
对ReturnJob()
的调用是一个简单的MySQL
语句,它返回Jobs
的列表。由于本教程使用实体框架,我遇到了一些问题。单击标题链接不会按列,升序或降序对数据进行排序 - 似乎没有任何事情发生。
其次,即使这确实有效,我也会调用MySQL数据库,并在每次有人过滤或搜索数据时检索大约1000个作业。我宁愿存储Jobs
,然后在过滤/搜索时处理其他列表。
由于我对Asp / MVC完全陌生,我对如何将这一切全部移出我的Index()方法感到困惑。我很感激任何帮助。