2013-03-12 75 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());