C# ASP NET核心MVC数据库列表视图,带对所有列进行排序

C# ASP NET核心MVC数据库列表视图,带对所有列进行排序,c#,asp.net-mvc,asp.net-core,listview,C#,Asp.net Mvc,Asp.net Core,Listview,在我的FileManager.cshtml页面(下面的代码)中有一个列表视图,我需要对该视图中显示的所有列实现排序功能。我浏览了web和YouTube上的一些示例,但是有Javascript函数或“手工”名称空间。没有JScript,是否可以这样做? 谢谢你的帮助 “我的控制器”中的函数,该函数显示按记录的用户ID筛选的dbo.Files中的列表视图: private readonly TextCloudContext; 公共IActionResult文件管理器() { var user=\u

在我的
FileManager.cshtml
页面(下面的代码)中有一个列表视图,我需要对该视图中显示的所有列实现排序功能。我浏览了web和YouTube上的一些示例,但是有Javascript函数或“手工”名称空间。没有
JScript
,是否可以这样做? 谢谢你的帮助

“我的控制器”中的函数,该函数显示按记录的用户ID筛选的
dbo.Files
中的列表视图:

private readonly TextCloudContext;
公共IActionResult文件管理器()
{
var user=\u userManager.GetUserId(用户);
var items=Context.Files.Where(f=>f.UserID==user.ToList();
返回视图(项目);
}
TextCloudContext.cs中的字符串,在我的SQL Server表“文件”的“文件”表中具有get和set值:

最后,使用table类查看:


@DisplayNameFor(model=>model.Name)
@DisplayNameFor(model=>model.Extension)
@DisplayNameFor(model=>model.Date)
@Html.DisplayName(“操作”)
@foreach(模型中的var项目)
{
@DisplayFor(modelItem=>item.Name)
@DisplayFor(modelItem=>item.Extension)
@DisplayFor(modelItem=>item.Date)
-这个Html还不起作用
@ActionLink(“下载”,“下载”,新的{fileName=item.ToString()})|
@ActionLink(“删除”,“删除”,新的{/*id=item.PrimaryKey*/})
}
基于,下面是一个工作演示,如下所示:

视图:

@model IEnumerable

请查看此项:
public DbSet<File> Files { get; set; }
public class File
{
    public int Id { get; set; }
    [Display(Name = "File Name")]
    public string Name { get; set; }
    public string Data { get; set; }
    [Display(Name = "File Type")]
    public string Extension { get; set; }
    [Display(Name = "Date")]
    public string Date { get; set; }
    public string UserID { get; set; }
    public TextCloudUser User { get; set; }
}
@model IEnumerable<File>
<table class="table">
    <thead>
        <tr>
            <th>
                <a asp-action="FileManager" asp-route-sortOrder="@ViewData["NameSortParm"]">@Html.DisplayNameFor(model => model.Name)</a>      
            </th>
            <th>
                <a asp-action="FileManager" asp-route-sortOrder="@ViewData["ExtensionSortParm"]">@Html.DisplayNameFor(model => model.Extension)</a>
            </th>
            <th>
                <a asp-action="FileManager" asp-route-sortOrder="@ViewData["DateSortParm"]">@Html.DisplayNameFor(model => model.Date)</a>
            </th>
            <th>
                @Html.DisplayName("Actions")
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Name)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Extension)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Date)
                </td>
                <td>
                    @Html.ActionLink("Download", "Download", new { fileName = item.ToString() }) |
                    @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
                </td>
            </tr>
        }
    </tbody>
</table>
public IActionResult FileManager(string sortOrder)
    {
        //var user = _userManager.GetUserId(User);
        //var items = Context.Files.Where(f => f.UserID == user);  //you may change this..

        //for easy testing,i just create data manually..
        var items = new List<File>()
        {
            new File(){ Id=1, Data="a", Date="2019-8-9", Extension=".jpg", Name="file1", UserID="1"},
            new File(){ Id=1, Data="b", Date="2019-7-9", Extension=".png", Name="file2", UserID="2"},
            new File(){ Id=1, Data="c", Date="2019-5-8", Extension=".png", Name="file3", UserID="3"},
            new File(){ Id=1, Data="d", Date="2019-4-7", Extension=".jpg", Name="file4", UserID="4"}
        }.AsQueryable();

        ViewData["NameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
        ViewData["DateSortParm"] = sortOrder == "Date" ? "date_desc" : "Date";
        ViewData["ExtensionSortParm"] = sortOrder == "Extension" ? "ext_desc" : "Extension";
        switch (sortOrder)
        {
            case "name_desc":
                items = items.OrderByDescending(s => s.Name);
                break;
            case "Date":
                items = items.OrderBy(s => s.Date);
                break;
            case "date_desc":
                items = items.OrderByDescending(s => s.Date);
                break;
            case "Extension":
                items = items.OrderBy(s=>s.Extension);
                break;
            case "ext_desc":
                items = items.OrderByDescending(s => s.Extension);
                break;
            default:
                items = items.OrderBy(s => s.Name);
                break;
        }
        return View(items);
    }