2013-03-12 56 views
2

我在这里跟着ASP.Net教程,它工作得很好:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-applicationMVC 3 OrderByDescending不工作

现在,我想它自己,它似乎并没有工作。我对编程一般都很陌生,所以请像我一样和我交谈7.谢谢!

控制器:

public ViewResult Index(string sortOrder) 
    { 
     ViewBag.CurrentSort = sortOrder; 
     ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "Name desc" : ""; 

     var students = from s in db.ComputerMaintenanceModels 
         select s; 
     switch (sortOrder) 
     { 
      case "Name desc": 
       students = students.OrderByDescending(s => s.Name); 
       break; 
     } 
     return View(db.ComputerMaintenanceModels.ToList()); 
    } 

查看

@Html.ActionLink("Name", "Index", new { sortOrder=ViewBag.NameSortParm }) 

当我点击名称列,它处理,但该命令没有改变。我错过了什么吗?我的代码是否正确?

回答

0

您正在生成一个查询,然后在您的return语句中忽略它。你应该使用类似:

return View(students); 
+0

因为我有类别和子类别,它实际上对它们进行排序,而不是该项目的内部。但这是我可以尝试解决的一个新问题。谢谢你的帮助! – Batsu 2013-03-12 17:47:00

0

你必须返回

return View(students.ToList()); 

相反

return View(db.ComputerMaintenanceModels.ToList()); 

因为studens是你拿着你的查询变量。 如果您返回db.ComputerMaintenanceModels.ToList(),您将继续使用相同的查询,而无需订购。

1

,你想处理case语句的情况下,ASC部分:

switch (sortOrder) 
      { 
       case "Name desc": 
        students = students.OrderByDescending(s => s.Name); 
        break; 
       case "Name asc": 
        students = students.OrderBy(s => s.Name); 
        break; 
      } 

return View(students.ToList());