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
在myShoeController
的索引
视图中,我向用户显示了他使用一些过滤器请求的鞋的列表
,这里没有问题
该列表显示在默认的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类)的代码以及控制器的代码?