1. 程式人生 > >排序、 篩選和分頁與 ASP.NET MVC 應用程式中的實體框架

排序、 篩選和分頁與 ASP.NET MVC 應用程式中的實體框架

http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application


Contoso 大學示例 web 應用程式演示如何建立使用實體框架 6 程式碼第一次和視覺工作室 2013年的 ASP.NET MVC 5 應用程式。
系列教程有關的資訊,請參閱本系列第一篇教程
.

在前面的教程你實施一套基本的 CRUD 操作,為Student

實體的 web 頁。在本教程中,您將新增排序、 篩選和分頁功能到學生索引頁。您還將建立一個頁面,並簡單分組。

下面的插圖顯示頁面當你完成時的外觀。列標題是連結,使用者可以單擊要作為排序依據的列。單擊列標題,一再升序和降序之間切換。

Students_Index_page_with_paging

將列排序連結新增到學生索引頁

若要新增排序到學生索引頁面,會改變Student控制器的Index方法和Student索引檢視中新增程式碼。

新增排序功能的索引方法

Controllers\StudentController.cs,用下面的程式碼替換Index法︰

publicActionResultIndex(string
sortOrder){ViewBag.NameSortParm=String.IsNullOrEmpty(sortOrder)?"name_desc":"";ViewBag.DateSortParm= sortOrder =="Date"?"date_desc":"Date";var students =from s in db.Studentsselect 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;}returnView(students.ToList());}

此程式碼接收sortOrder引數從 URL 中的查詢字串。由 ASP.NET MVC 作為操作方法的引數提供的查詢字串值。該引數將是一個字串,它是"名稱"日期",可以選擇跟著一條下劃線和字串"desc"來指定降序排列。預設排序順序升序。

第一次請求是索引頁,那裡是沒有查詢字串。學生按升序排列顯示的LastName,這是預設設定,設立的秋天通過案例switch語句。當用戶單擊列標題的超連結時,在查詢字串中提供適當sortOrder值。

兩個ViewBag變數使用,檢視可以配置列標題超連結與適當的查詢字串值︰

ViewBag.NameSortParm=String.IsNullOrEmpty(sortOrder)?"name_desc":"";ViewBag.DateSortParm= sortOrder =="Date"?"date_desc":"Date";

這些都是三元的語句。第一個指定sortOrder引數為 null 或為空,是否ViewBag.NameSortParm應設定為"name_desc";否則,應將設定為空字串。這兩個語句啟用檢視,設定列標題的超連結,如下所示︰

當前排序順序 最後名稱超連結 日期的超連結
最後名稱升序排列 降序 升序
最後名稱降序 升序 升序
日期升序 升序 降序
日期降序 升序 升序

該方法使用LINQ 到實體來指定要排序的列。程式碼建立了一個IQueryable變數之前switch語句、 修改在switch語句,和後switch語句呼叫ToList方法。當您建立和修改IQueryable變數時,沒有查詢被髮送到資料庫。不執行查詢,直到您轉換IQueryable物件集合通過呼叫一個方法如ToList因此,這段程式碼結果直到return View的語句不執行單個查詢中。

作為編寫不同的 LINQ 語句為每個排序順序的替代方法,您可以動態地建立 LINQ 語句。關於動態 LINQ 的資訊,請參閱動態 LINQ.

新增列標題到學生索引檢視的超連結

Views\Student\Index.cshtml,將標題行的<tr><th>元素替換突出顯示的程式碼︰

<p>
    @Html.ActionLink("Create New", "Create")
</p><table><tr><th>
            @Html.ActionLink("Last Name", "Index", new { sortOrder = ViewBag.NameSortParm })
        </th><th>First Name
        </th><th>
            @Html.ActionLink("Enrollment Date", "Index", new { sortOrder = ViewBag.DateSortParm })
        </th><th></th></tr>

@foreach (var item in Model) {

此程式碼使用ViewBag屬性中的資訊來設定超連結與適當的查詢字串值。

執行頁並單擊最後一個名字註冊日期列標題,以驗證該文獻整理工作。

Students_Index_page_with_sort_hyperlinks

單擊姓氏標題後,學生是降序顯示最後一個名稱。

向學生索引頁新增一個搜尋框

若要新增篩選到學生索引頁,你會向檢視中新增一個文字框和一個提交按鈕和Index方法中做相應的修改。文字框中會讓你輸入名字和姓氏欄位中搜索的字串。

將篩選功能新增到索引方法

Controllers\StudentController.cs,將Index方法替換下面的程式碼 (更改突出顯示)︰

publicViewResultIndex(
            
           

相關推薦

排序 篩選 ASP.NET MVC 應用程式實體框架

http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-frame

MVC5 Entity Framework學習之新增排序篩選功能

前一篇文章中實現了對Student 實體的的基本CRUD操作,在這篇文章中將演示如何為Students Index頁面新增排序、篩選和分頁的功能。 下面是當完成排序、篩選和分頁功能後的截圖,你可以點選列標題來進行排序。 1.為 Students Index頁面新增列排序連

4ASP.NET MVC入門到精通——NHibernate構建一個ASP.NET MVC應用程式

下週就去辦理離職手續了,之前沒有使用過NHibernate,只知道NHibernate是一種ORM框架,但是聽說新公司是使用NHibernate在做專案,所以,我就網上找資料學習一下NHibernate,在此以筆記的形式,記錄自己的學習過程,一來供自己以後備忘用,而來希望對同樣準備學習NHibernate

使用Metrics.NET 構建 ASP.NET MVC 應用程式的效能指標

通常我們需要監測ASP.NET MVC 或 Web API 的應用程式的效能時,通常採用的是自定義效能計數器,效能計數器會引發無休止的運維問題(損壞的計數器、許可權問題等)。這篇文章向你介紹一個新的替代效能計數器的工具Metrics.NET,因為是它是內部的,所以我們能夠向系統中新增更多更有意義的度量標準。

ASP.NET MVC應用程式資料夾

Views 資料夾 Views 資料夾存有與應用程式的顯示相關的 HTML 檔案(使用者介面)。 Views 資料夾中含有每個控制器對於的一個資料夾。 Visual Web Developer 已建立了一個 Account 資料夾、一個 Home 資料夾、一個 Shared 資料夾(在 Views 資料夾內

15.ASP.NET Core 應用程式的靜態檔案中介軟體

在這篇文章中,我將向大家介紹,如何使用中介軟體元件來處理靜態檔案。這篇文章中,我們討論下面幾個問題:在ASP.NET Core中,我們需要把靜態檔案存放在哪裡?在ASP.NET Core中 wwwroot資料夾是啥?怎樣在ASP.NET Core應用程式中,配置靜態檔案中介軟體?UseFileServer中介

將終結點圖新增到你的ASP.NET Core應用程式

在本文中,我將展示如何使用`DfaGraphWriter`服務在ASP.NET Core 3.0應用程式中視覺化你的終結點路由。上面文章我向您演示瞭如何生成一個有向圖([如我上篇文章中所示](https://www.cnblogs.com/yilezhu/p/13301981.html)),可以使用[Grap

DataTables伺服器端傳入傳出(接收提交)的資料格式 搜尋排序後臺資料的互動

在dataTables伺服器端處理模式下,想要用好dataTables 必須先去了解它與後臺傳遞資料的格式,這樣才能做好資料在後臺的處理,完成dataTables的一系列篩選、排序和分頁功能。 1. dataTables的提交資料 dataTables向

CookieSession

為什麼使用Cookie:因為HTTP請求是沒有狀態的,每一次請求都是獨立的。 什麼是Cookie:Cookie就是儲存在瀏覽器上的鍵值對,服務端控制著響應,在響應裡新增一個鍵值對,讓瀏覽器在本地儲存,下一次請求的時候,自動攜帶這個鍵值對,是在瀏覽器端設定的,瀏覽器端也可以禁用Cookie。 Cookie的

ASP.NET MVC搭建專案後臺UI框架—6客戶管理(新增修改查詢

目錄 接著之前未寫完的繼續,本篇,我將講解在此UI框架中和ASP.NET MVC4進行結合開發。效果如下: 這裡,我將新增和修改用了兩個不同的檢視,當然也可以把新增和修改放到同一個檢視中,但是要寫一些業務邏輯程式碼來區分當前呼叫的是修改還是新增,根據新增和修改的不同,而對介面進行不同的操作。 新

ASP.NETASP.NET MVC 的差異優點及缺點

一個 src 頁面加載 加載 class .net 技術分享 views bubuko 眾所周知,在微軟的編程語言發展歷史中,asp.net是不得不提的一個重要的發展階段,它具有快速開發、層級明確的優點,但最大的缺點,同時也是它逐漸被廢棄的原因就是,頁面加載的viewsta

再談使用X.PagedList.Mvc ASP.NET Core 2.1)

asp ram 默認 mvc 文本 它的 otn package www. 在以前的博文中寫過使用X.PagedList.Mvc組件來對ASP.NET MVC應用程序進行分頁,可以參考此篇隨筆:Asp.net MVC 使用PagedList(新的已更名 為X.PagedLi

ASP.NET MVC搭建專案後臺UI框架—3面板摺疊展開

目錄 上一節已經新增好了選單特效,這一節,我們來新增面板的摺疊和展開功能,效果圖如下: 思路:我在Right檢視中添加了一個div,在這個div中存放一張圖片,通過對這張圖片的點選,來控制Left檢視的隱藏和顯示。說白了,這裡其實就是修改主框架Index檢視中frameset的 cols屬性。

ASP.NET MVC搭建專案後臺UI框架—9伺服器端排序

關於jquery datables的在伺服器端的排序,在網上貌似沒有看到.NET的例子,說實話,之前我也迷惑過,習慣了直接從網上找現成的東西,經過一翻搜尋,沒找到,於是乎,自己除錯唄,調了前臺,調後臺,還真被我看出了規律。事實上datables是支援多列排序的,但是本例,我只寫了單列排序。 在控制器

ASP.NET MVC搭建專案後臺UI框架—5Demo演示ControllerView的互動

目錄 這一節,我將用一個Demo來演示在此UI框架中,控制器和檢視的互動。以渠道管理為例。效果圖如下: 按回車執行查詢,不是F5,筆誤。 這裡我使用了基於jquery的模態窗體元件lhgdialog和表格元件dataTables。dataTables更多資料請參考:http://dt.thxop

ASP.NET MVC搭建專案後臺UI框架—4tab多籤支援

目錄 在點選左側選單中的選項時,我希望有Extjs、EasyUI等中類似的tab頁籤功能,因為這樣可以支援多個頁面的瀏覽,有時候我們可能需要同時開啟多個頁面,如果不使用頁籤,那麼每次要檢視某個頁面都要去重新呼叫並重新整理,如果在網速慢或者該介面載入很耗時的情況下,簡直會讓人奔潰。因為我又不想引入整個Ex

MVC學習系列-WebFormasp.net MVC兩種設計模式區別MVC設計模式基礎瞭解

ASP.NET 是一個開發框架,用於通過 HTML、CSS、JavaScript 以及伺服器指令碼來構建網頁和網站。ASP.NET 支援三種開發模式:Web Pages、MVC (Model View Controller) 以及 WebForm。下面首先區別比較一下Web

Spring netAsp net Mvc結合示例

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

關於ASP.NET WebFormASP.NET MVC的比較

WebForm的理解 1、 WebForm概念 ASP.NETWebform提供了一個類似於Winform的事件響應GUI模型(event-drivenGUI),隱藏了HTTP、HTML、JavaScript等細節,將使用者介面構建成一個伺服器端的樹結構控制元件(Co

Chart.js ASP.NET MVC 整合應用

Chart.js 是一套開放原始碼的「圖表」繪製函式庫,和其他第三方的圖表工具相比,Chart.js 的特色如下: 支援 HTML 5、響應式網頁 (RWD, Responsive Web Design) 可免費使用,且可作為商業用途 開放原始碼 (GitHub) 可用 JavaScrip