跟互聯力量學Asp.net MVC3-從控制器到模型

數據庫和模型》一節已經創建了數據庫結構,在本節中,我們將要創建一個新的BooksController類,並且書寫代碼來獲取數據庫中的數據,並通過視圖模板來顯示在瀏覽器中。

鼠標右擊Controllers文件夾,點擊“添加”菜單下的“控制器”菜單項,將會彈出一個“添加控制器”對話框:

clip_image002

添加控制器

在該對話框中將控制其命名爲BooksController,然後點擊添加按鈕,該對話框被關閉。觀察解決方案資源管理器中,Controllers文件夾下增加了一個名爲BooksController.cs的文件,並且呈打開狀態。讓我們更新BooksController類中的Index方法,以便獲取書籍清單。

這裏需要注意的是,爲了引用我們前面創建的BooksRepository類,你需要在文件頭部追加using MvcBooks.Models;

clip_image004

這段代碼實施了一個LINQ查詢來獲取所有書籍信息,我們還需要一個視圖模板來顯示這個書籍清單,所以在Index方法內點擊鼠標右鍵,然後點擊“添加視圖”來添加一個視圖。

由於這裏我們需要將一個Movie類傳遞給視圖,所以在“添加視圖”對話框中,與本教程中前幾次在該對話框中之行的操作有所不同,前幾次我們都是直接點擊添加按鈕來創建一個空白的視圖模板,但是這一次我們想讓VS2010爲我們自動創建一個具有一些默認處理的強類型的視圖,所以我們勾選“創建強類型視圖”複選框,在模型類下拉框中選擇“Movie(MvcBooks.Models)”(如果模型類中不存在這個類,請先點擊調試菜單下的“生成MvcBooks”生成該類),在支架模板下拉框中選擇“List”,最後勾選“引用腳本”複選框:

clip_image006

添加強類型視圖

點擊添加按鈕,VS2010自動生成一個視圖,並且自動在視圖文件中添加顯示書籍清單所需要的代碼。這裏,我們首先用與前面修改HelloWorld控制器所用的視圖中的標題同樣的方法來修改這個Books控制器所用視圖中的標題。

下面的代碼清單是爲修改後的這個視圖中的完整代碼。在這段代碼中,我們將releaseDate(發行日期)屬性的格式化字符串從原來的“{0:g}”修改爲“{0:d}”(長日期修改爲短日期),將Price(書價)屬性的格式化字符串從原來的“{0:F}”修改爲“{0:c}”(float類型修改爲貨幣類型)。

另外,將列表標題中的文字全部修改爲中文名稱。

clip_image008

瀏覽器輸入:http://localhost:xx/books,運行結果如下:

clip_image010

強類型模型與@model關鍵字

在本教程的前文中,我們介紹了一個控制器可以使用ViewBag對象來將數據或對象傳遞到視圖模板中。ViewBag是一個動態對象,它提供了一種便利的,後期綁定的方法來將信息從控制器傳遞到視圖中。

ASP.NET MVC也提供了一種利用強類型的方法來將數據或對象傳遞到視圖模板中。這種強類型的方法爲你的編碼過程提供了很豐富的編輯時的智能輸入提示信息與非常好的編譯時的檢查。接下來我們將結合這種方法與我們的Books控制器(BooksController)與視圖模板(Index.cshtml)一起使用。

請注意在我們的BooksController控制器的Index方法中,我們在調用View()方法時傳入了一個參數,這一行代碼表示將一個Books列表從控制器傳遞到了視圖中。

return View(books.FindAllBooks());

通過在視圖模板文件的頭部使用@model語句,視圖模板可以識別傳入的參數中的對象類型是否該視圖模板所需要的對象類型。請記住當我們在創建這個Books控制器所使用的模板時,我們在“添加視圖”對話框中勾選了“創建強類型視圖”複選框,在模型類下拉框中選擇了“BookInfo(MvcBooks.Models)”, 在支架模板下拉框中選擇了“List”。所以VS2010自動在我們的視圖模板文件的第一行中添加了如下所示的語句。

@model IEnumerable<MvcBooks.Models.BookInfo>

@model關鍵字允許我們在視圖模板中直接訪問在控制器類中通過使用強類型的“模型”而傳遞過來的BookInfo類的列表。例如,在我們的Index.cshtml視圖模板中,我們可以通過foreach語句來遍歷這個強類型的模型,訪問其中的每一個BookInfo對象。

因爲這裏的“模型”是強類型的(IEnumerable<BookInfo>),所以在循環遍歷時“模型”中的每一個項目(“item”)也是一個強類型的BookInfo對象,可以直接訪問該對象的每一個屬性。同時這也意味着我們可以在編譯時檢查我們的代碼,同時在書寫代碼時也可以使用代碼編輯器提供的智能輸入提示信息。

你現在已經可以訪問數據庫中的Bookinfo數據表,並且有了一個簡單的頁面來顯示這個表中的內容。在下一節,我們將增加一個追加數據的方法和一個追加數據的視圖,並且向數據庫中追加一些數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章