通过Asp.Net / MVC搜索和过滤表

时间:2017-06-05 10:59:18

标签: c# mysql asp.net-mvc

我遵循此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()方法感到困惑。我很感激任何帮助。

0 个答案:

没有答案