天天看點

ASP.NET MVC 5 學習教程:添加查詢

<a href="http://www.qeefee.com/mvc/mvc-5-adding-a-controller">添加控制器</a>

<a href="http://www.qeefee.com/mvc/mvc-5-adding-a-view">添加視圖</a>

<a href="http://www.qeefee.com/mvc/mvc-5-changing-views-and-layout-pages">修改視圖和布局頁</a>

<a href="http://www.qeefee.com/mvc/mvc-5-passing-data-from-the-controller-to-the-view">控制器傳遞資料給視圖</a>

<a href="http://www.qeefee.com/mvc/mvc-5-adding-a-model">添加模型</a>

<a href="http://www.qeefee.com/mvc/mvc-5-creating-a-connection-string">建立連接配接字元串</a>

<a href="http://www.qeefee.com/mvc/mvc-5-accessing-your-models-data-from-a-controller">通過控制器通路模型的資料</a>

<a href="http://www.qeefee.com/mvc/mvc-5-examining-the-generated-code">生成的代碼詳解</a>

<a href="http://www.qeefee.com/mvc/mvc-5-working-with-localdb">使用 SQL Server LocalDB</a>

<a href="http://www.qeefee.com/mvc/mvc-5-examining-the-edit-methods-and-edit-view">Edit方法和Edit視圖詳解</a>

<a href="http://www.qeefee.com/mvc/mvc-5-adding-search">添加查詢</a>

<a href="http://www.qeefee.com/mvc/mvc-5-adding-a-new-field">Entity Framework 資料遷移之添加字段</a>

<a href="http://www.qeefee.com/mvc/mvc-5-adding-validation">添加驗證</a>

<a href="http://www.qeefee.com/mvc/mvc-5-examining-the-details-and-delete-methods">Details 和 Delete 方法詳解</a>

在本節中,我們為 Index 方法添加查詢功能,使我們能夠根據電影的題材或名稱進行查找。

修改 Index 表單

Start by updating the <code>Index</code> action method to the existing <code>MoviesController</code> class. Here's the code:

首先,我們需要更新 MoviesController 的 Index 方法,代碼如下:

代碼清單1:更新後的Index方法 - MoviesController.cs

Index 方法的第一行代碼建立了一個 LINQ 查詢,用來選擇符合條件的電影:

代碼清單2:選擇電影的LINQ查詢

這個查詢雖然在這裡定義出來,但并沒有在資料庫中執行。

如果 <code>searchString</code> 參數包含一個字元串(不是空字元串),movies 查詢将會添加一個查詢字元串的過濾條件,代碼如下:

代碼清單3:添加查詢過濾條件

代碼清單3中的 <code>s =&gt; s.Title</code>是一個 Lambda 表達式,Lambda 表達式被用在基于方法的LINQ查詢中(上面代碼中的 Where 方法),當做參數來使用。LINQ 語句在定義或修改的時候不會執行,相反的,查詢會延遲執行,這意味着一個指派語句直到疊代完成或調用 ToList 方法才具備真正的值。在上面的示例中,查詢語句在 Index.cshtml 視圖中執行。

現在,你可以修改Index 視圖,讓他展示一個表單給使用者輸入。

運作應用程式,并導航到 /Movies/Index ,在URL後面添加一個查詢,例如 <code>?searchString=中國</code>,被過濾的電影内容如下:

圖1:查詢到的電影資料

ASP.NET MVC 5 學習教程:添加查詢

If you change the signature of the <code>Index</code> method to have a parameter named <code>id</code>, the <code>id</code> parameter will match the<code>{id}</code> placeholder for the default routes set in the App_Start\RouteConfig.cs file.

如果你把 Index 方法的參數名改為 id,那麼 id 參數将會比對 App_Start\RouteConfig.cs 檔案中的預設路由中的<code>{id}</code> 。

修改後的Index方法如下:

代碼清單4:修改後的 Index 方法

修改以後,我們可以通過路由資料來傳遞查詢字元串:

圖2:使用URL片段進行查找

ASP.NET MVC 5 學習教程:添加查詢

然而,你不能指望使用者每次都通過修改URL來查找電影,是以你需要在界面上幫助他們過濾資料。如果你剛剛使用代碼清單4中的代碼測試了路由綁定是如何傳遞ID參數,現在再把它改回來,原始的代碼可參考代碼清單1。

打開Views\Movies\Index.cshtml 檔案,在<code>@Html.ActionLink("Create New", "Create")</code>後面添加如下代碼:

代碼清單5:修改Index.cshtml

@using (Html.BeginForm()) { &lt;p&gt; Title: @Html.TextBox("SearchString") &lt;br /&gt; &lt;input type="submit" value="Filter" /&gt; &lt;/p

<code>Html.BeginForm</code> 幫助方法建立一個 <code>&lt;form&gt;</code> 标簽。通過單擊“Filter”按鈕将表單送出給目前的頁面。

運作應用程式,然後試着查找一個電影:

圖3:在界面中過濾資料

ASP.NET MVC 5 學習教程:添加查詢

我們沒有為 Index 方法定義 HttpPost 的重載,因為我們根本沒有修改資料,隻是做了一個查詢。

我們可以為 Index 方法添加 HttpPost 的重載,這樣一來,程式将會調用 HttpPost 修飾的 Index 方法,相應的代碼和截圖如下:

代碼清單6:HttpPost 版的 Index 方法

圖4:調用了 HttpPost 版本的 Index 方法

ASP.NET MVC 5 學習教程:添加查詢

然而,盡管我們添加了HttpPost版的Index方法,它在實作的時候仍然存在一些局限性。設想你想将一個比較詳細的查詢添加書簽,或者你想将查詢結果以連結形式發送給朋友,注意觀察HTTP POST 請求的時候,URL是沒有改變的(仍然是 localhost:xxxxx/Movies/Index),這個位址本身不包含查詢資訊。現在,查詢資訊是作為表單資料發送到伺服器的,這意味着你不能抓取到URL中的查詢資訊,将URL作為書簽或發送給朋友。

解決方案就是重寫 BeginForm 語句,使它發送一個GET請求,進而調用HttpGet版本的Index方法,修改後的代碼如下:

代碼清單7:使用GET請求的BeginForm方法

圖5:使用GET請求的BeginForm參數描述

ASP.NET MVC 5 學習教程:添加查詢

現在你再點選“Filter”按鈕進行查找,查找的參數将包含在URL中,然後調用HttpGet 版的 Index 方法:

圖6:URL中包含了查詢參數

ASP.NET MVC 5 學習教程:添加查詢

添加題材查詢

删掉之前代碼中添加的 HttpPost 版的 Index方法,以後我們不再用到了。

然後,我們修改 Index 方法的代碼,使它能夠根據題材進行查詢。修改後的代碼如下:

代碼清單8:添加了題材查詢的Index方法

new SelectList

在修改完控制器之後,我們還需要在Index視圖中添加一個字段。在我們之前的名字查詢之前,使用 <code>Html.DropDownList</code> 添加一個下拉框,修改後的代碼如下:

代碼清單9:添加題材下拉清單

Genre: @Html.DropDownList("movieGenre", "All"

代碼 @Html.DropDownList("movieGenre", "All") 生成一個下拉清單,參數 movieGenre 指明要查找的ViewBag 中的資料集合的名稱,我們在代碼8中做了标記;參數 all 是預選中的資料,我們可以使用“勵志”替換。

運作應用程式,試着根據題材和标題查詢一下:

圖7:根據題材和标題進行查找

ASP.NET MVC 5 學習教程:添加查詢

在本節中,我們建立了查詢的方法和視圖,使使用者可以根據電影的标題和題材進行查詢。在下一節中,我們将結束如何為Movie 模型添加屬性,以及如何添加一個自動建立測試資料庫的初始值。

本文轉自齊師傅部落格園部落格,原文連結:http://www.cnblogs.com/youring2/p/mvc-5-adding-search.html,如需轉載請自行聯系原作者

繼續閱讀