Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 对列表进行排序<;T>;MVC视图页面中的对象_Asp.net Mvc_Jquery_Sorting - Fatal编程技术网

Asp.net mvc 对列表进行排序<;T>;MVC视图页面中的对象

Asp.net mvc 对列表进行排序<;T>;MVC视图页面中的对象,asp.net-mvc,jquery,sorting,Asp.net Mvc,Jquery,Sorting,我有一个ShoeItem类,其中存储了一些Shoe属性,例如Model,Price,Color 在myShoeController的索引视图中,我向用户显示了他使用一些过滤器请求的鞋的列表,这里没有问题 该列表显示在默认的MVC 3.0列表视图中。。查看页面(“Index.cshtml”)的My@Model类型为List 但是,我希望用户能够根据这些属性(升序或降序)对结果列表进行排序,但我不能 我尝试从ShoeController调用PartialViewResult,方法是将列表作为Ajax

我有一个
ShoeItem
类,其中存储了一些
Shoe
属性,例如
Model
Price
Color

在my
ShoeController
索引
视图中,我向用户显示了他使用一些过滤器请求的
鞋的
列表
,这里没有问题

该列表显示在默认的MVC 3.0列表视图中。。查看页面(“Index.cshtml”)的My
@Model
类型为
List

但是,我希望用户能够根据这些属性(升序或降序)对结果列表进行排序,但我不能

我尝试从
ShoeController
调用
PartialViewResult
,方法是将
列表作为
Ajax中的参数发送回。BeginForm
,将其排序回那里,并使用此排序的列表显示
PartialView
,但列表参数以null形式显示给控制器

我还尝试用jQuery对客户端进行排序,但无法从jQuery中访问
列表
对象。。如果你愿意的话,我可以发布代码,但是很简单

有什么想法吗?

有两种选择

  • 向服务器发出AJAX请求,传递排序参数,例如
    /shoes/?sort=model&dir=asc
    。将这些参数带到控制器操作中,检索项,对它们进行排序并返回JsonResult。通过JavaScript呈现新列表
  • 使用sort参数向服务器发出AJAX/整页请求。将这些参数带到控制器操作中,检索项目并返回AJAX的PartialView和完整页面请求的ViewResult
  • 第一种方法很难维护,因为最终从两个不同的位置(服务器和客户端)进行渲染。尽管使用一些模板库(如moustache:)可以简化这一过程

    对于第二个选项,控制器将如下所示。我做了一些假设,它可能会被简化,但它会帮助你开始。如果您的鞋子存储在数据库中,请确保您在IQueryable上执行筛选和排序操作,这样数据库服务器就可以执行此操作,而不是将数据返回到.NET,然后对其进行筛选

    public ViewResult Index(int? colour, string sort, string dir)
    {
        IQueryable<Shoe> shoes = shoeService.GetAllShoes();
    
        // Filter by something
        if(colour.HasValue)
            shoes = shoes.Where(s => s.Colour = colour);
    
        // Order the items
        switch((sort ?? "").ToLower())
        {
            case "colour":
                if(dir == "desc")
                    shoes = shoes.OrderByDescending(s => s.Colour.Name);
                else
                    shoes = shoes.OrderBy(s => s.Colour.Name);
                break;
        }
    
        if(Request.IsAjaxRequest())
            return PartialView(shoes.ToList());
        return View(shoes.ToList());
    }
    
    公共视图结果索引(int?颜色、字符串排序、字符串目录)
    {
    IQueryable shoes=shoeService.GetAllShoes();
    //被某物过滤掉
    if(颜色值)
    鞋=鞋。其中(s=>s.颜色=颜色);
    //订购物品
    开关((排序??).ToLower()
    {
    案例“颜色”:
    if(dir==“desc”)
    shoes=shoes.OrderByDescending(s=>s.color.Name);
    其他的
    shoes=shoes.OrderBy(s=>s.color.Name);
    打破
    }
    if(Request.IsAjaxRequest())
    返回PartialView(shoes.ToList());
    返回视图(shoes.ToList());
    }
    
    能否显示POJO(ShoeItem类)的代码以及控制器的代码?