程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> Contoso學習(三):排序、過濾及分頁

Contoso學習(三):排序、過濾及分頁

編輯:關於ASP.NET

在上一個課程中,我們已經學習了如何使用 EF 對 Student 實體進行增、刪、改、查處理。這次的課程我們將對學生的 Index 頁面加入排序、過濾以及分頁的功能。還要創建一個頁面完成簡單的分組。

下面的截圖展示了完成之後的頁面,列的標題作為鏈接支持用戶通過點擊完成排序,點擊標題可以在升序和降序之間進行切換。

3-1  在 Students 的 Index 頁面增加列標題鏈接

為 Index 頁面增加排序的功能,我們需要修改 Student 控制器的 Index 方法,還需要為 Student 視圖增加代碼。

3-1-1  為 Index 方法增加排序功能

打開 Controllers\StudentController.cs,將 Index 方法替換為如下的代碼。

public ViewResult Index(string sortOrder)  
{  
    ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "Name desc" : "";  
    ViewBag.DateSortParm = sortOrder == "Date" ? "Date desc" : "Date";  
    var students = from s in db.Students  
                   select s;  
    switch (sortOrder)  
    {  
        case "Name desc":  
            students = students.OrderByDescending(s => s.LastName);  
            break;  
        case "Date":  
            students = students.OrderBy(s => s.EnrollmentDate);  
            break;  
        case "Date desc":  
            students = students.OrderByDescending(s => s.EnrollmentDate);  
            break;  
        default:  
            students = students.OrderBy(s => s.LastName);  
            break;  
    }  
    return View(students.ToList());  
}

這段代碼從 URL 中接收名為 sortOrder 的參數,這個參數由 ASP.NET MVC 作為參數傳遞給 Action 方法。這個參數可以是  “Name” 或者 “Date”, 可能還有一個空格隔開的 desc 來指定降序。

當第一次請求 Index 的時候,沒有參數,學生使用 LastName 的升序順序顯示。這是通過 switchdefault 代碼段指定的,當用戶點擊一個列的標題鏈接的時候,合適的 sortOrder 值需要通過查詢字符串傳遞進來。

兩個 ViewBag 變量用來為視圖提供合適的查詢字符串鏈接值。

ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "Name desc" : "";  
ViewBag.DateSortParm = sortOrder == "Date" ? "Date desc" : "Date";

這裡使用了條件語句,第一個用來指定當 sortOrder 參數為 null 或者空串的時候, ViewBag.NameSortParm 應用被設置為 Name desc,其他情況下,應該被設置為空串。

這裡有四種可能,依賴於當前的排序情況:

如果當前的排序規則為 LastName 升序,那麼,LastName 鏈接應該設置為降序,Enrollment Date 鏈接必須被設置為按日期升序。

如果當前的排序規則為 LastName 降序,那麼,LastName 鏈接應該設置為升序,排序串應該為空串,日期為升序。

如果當前排序的規則為 Date 升序,那麼,鏈接應該為 LastName 升序和日期升序。

如果當前的排序規則為 Date 降序,那麼,鏈接應該為 LastName 升序和日期降序。

方法中使用 LINQ to Entities 來指定排序,在 switch 之前,代碼首先創建一個 IQueryable 變量,在 switch 語句中修改這個查詢表達式,最後調用 ToList 方法。在創建和修改查詢表達式 IQueryable 的時候,並沒有將查詢發送到數據庫中執行,查詢直到將 IQueryable 對象駝工調用類似 ToList 方法轉換到集合對象的時候才會執行,因此,代碼中查詢直到最後的 return View 才會被執行。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved