在上一篇文章中我們已經創建了實體類,在這一篇文章中,我將創建一個新的控制器類——BookController,使用BookController對Books表中的數據進行CURD操作的方法,并使用視圖模板在瀏覽器中顯示所查詢到的書籍數據信息。
一、添加控制器類
在Visual Studio 的“解決方案資源管理器”中右鍵單擊Controllers文件夾,并創建一個新的BookController控制器類。如下圖。
Visual Studio 會彈出一個“添加控制器”對話框(如下圖)。
在對話框中填寫如下數據
•控制器名稱:BookController。 (可以進行修改,如下圖是默認的Default1Controller,修改為BookController。)
•模板:包含讀/寫操作和視圖MVC控制器(使用Entity Framework)。
•模型類:Book(MvcApplication1.Models)。
•數據上下文類:BookDBContext(MvcApplication1.Models)。
•視圖:Razor(CSHTML)。 (默認設置。)
在填寫完以上數據之后,用鼠標左鍵單擊“添加”按鈕。Visual Studio會快速創建下列文件和文件夾:
1)在項目中的Controllers文件夾中創建一個BookController.cs文件。如下圖中的1處。
2)在項目的Views文件夾中創建一個Book文件夾。同時在Book文件夾中創建以下文件 Create.cshtml , Delete.cshtml , Details.cshtml , Edit.cshtml和Index.cshtml。如下圖中的2處。
3) ASP.NET MVC 4會自動創建對于數據庫的CRUD(創建,讀取,更新和刪除)操作方法和視圖。由Visual Studio自動創建CRUD操作方法和視圖被稱為基架。這樣我們不需要修改什么,就有了一個全功能的Web應用程序,可以讓你創建,查詢,修改和刪除書籍數據。
4)在Visual Studio中運行該應用程序。,瀏覽器請求http://localhost:36878/Book被路由到書籍控制器的默認Index操作方法。換句話說,瀏覽器請求http://localhost: 36878/Book實際與請求http://localhost: 36878/Book/Index是一樣的。瀏覽器中卻是什么數據也沒有顯示,因為現在數據庫中的Books表是一張空表,沒有任何數據。如下圖。
二、創建書籍
1) 用鼠標左鍵,點擊“Create New”鏈接,瀏覽器會導航到新建頁面,在此頁面中輸入有關書籍的一些數據,然后點擊“Create”按鈕。如下圖1,與圖2.
圖1
圖2
2) 當使用鼠標左鍵點擊“Create”按鈕時,瀏覽器會把表單數據發送到服務器上,服務器程序會把剛才填寫的書籍信息保存到數據庫中。然后瀏覽器會自動重定向到書籍列表的網址(http://localhost:36878/book),在那個頁面就可以看到新創建的書籍數據,已經存在了。如下圖。
三、編輯書籍
對剛才創建的書籍數據進行修改。在一條書籍記錄的最后面有三個鏈接,分別是Edit、Details、Deltet。 如下圖。
1) 用鼠標左鍵點擊“Edit”鏈接。會瀏覽器會自動轉到編輯界面。在編輯頁面中修改完數據,點擊“Save”按鈕,即把修改的數據保存到數據庫。如下圖。
2) 2用鼠標左鍵點擊“Details”鏈接。會瀏覽器會自動轉到詳細信息界面。如下圖。圖1,圖2。
圖1
圖2
四、對ASP.NET MVC自動生成代碼的解釋
在Visual Studio的“解決方案資料管理器”中打開Controllers\ BookController.cs文件,查看由Visual Studio自動生成的Index方法。代碼如下所示。
public class BookController : Controller { private BookDBContext db = new BookDBContext(); // // GET: // public ActionResult Index() { return View(db.Books.ToList()); } }
注意這一行代碼。
private BookDBContext db = new BookDBContext();
這行代碼是實例化一個BookDBContext類對象。如前面所述。您可以使用數據庫中的Books表中的數據進行查詢,修改和刪除。
當瀏覽器發出一個請求到Book控制器之后,由控制器中的默認方法(Index)返回了數據庫中Books表中數據的所有行,并將結果傳遞給Index視圖,然后呈現在瀏覽器,讓用戶看到。
五、強類型對象和@model關鍵字
在本文的上面部分,講了如何通過一個控制器傳遞數據或對象給使用ViewBag對象的視圖模板。該ViewBag是一個動態對象,它提供了將信息傳遞到一個視圖,在后期可以進行方便綁定的方式。
ASP.NET MVC還提供了強類型數據或將對象實例傳遞給視圖模板的能力。這種強類型的對象能夠更方便Visual Studio在進行代碼編譯時進行代碼檢查,并在Visual Studio編輯器中有更豐富的智能感知。在Visual Studio的基架機制就是使用這種方法與BookController類和視圖模板。
在Controllers\ BookController.cs文件中查看自動生成的Details方法。Details方法的代碼如下所示。
public ActionResult Details(int id = 0) { Book book = db.Books.Find(id); if (book == null) { return HttpNotFound(); } return View(book); }
如果想找到一本書籍,那么Book實體的一個實例會傳遞給Details視圖。請查看Views\Book\Details.cshtml文件。
通過包括在視圖模板文件的頂部@model語句,你可以指定視圖期望得到的對象類型。當您創建BookController控制器類時,Visual Studio會自動包含在Details.cshtml文件的頂部以下@model的語句:
@model MvcApplication1.Models.Book
這個@ model指令允許你通過強類型訪問控制器傳遞給視圖的Model對象的Book類。例如,在Details.cshtml模板,代碼通過每本書籍領域的DisplayNameFor和DisplayFor HTML輔助與強類型的Model對象。創建和編輯方法和視圖模板也能通過書籍的模型對象進行訪問。
查看Index.cshtml視圖模板,并在BookController.cs文件找到Index方法。請注意代碼是如何創建一個List對象時,使用View進行了封裝,通過這個封裝最終把書籍列表從控制器傳給了視圖。代碼如下。
public ActionResult Index() { return View(db.Books.ToList()); }
當您創建BookController控制器時,Visual Studio會自動在Index.cshtml文件的頂部添加以下@model的語句:
@model IEnumerable<MvcApplication1.Models.Book>
這個@ model指令允許您訪問控制器傳遞給視圖通過使用的強類型的Model對象的書籍名單。例如,在Index.cshtml模板,如下面的代碼在循環中通過強類型訪問Model對象。代碼如下。
@foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Category) </td> <td> @Html.DisplayFor(modelItem => item.Name) </td> <td> @Html.DisplayFor(modelItem => item.Numberofcopies) </td> <td> @Html.DisplayFor(modelItem => item.AuthorID) </td> <td> @Html.DisplayFor(modelItem => item.Price) </td> <td> @Html.DisplayFor(modelItem => item.PublishDate) </td> <td> @Html.DisplayFor(model => item.Rating) </td> <td> @Html.ActionLink("Edit", "Edit", new { id=item.BookID }) | @Html.ActionLink("Details", "Details", new { id=item.BookID }) | @Html.ActionLink("Delete", "Delete", new { id=item.BookID }) </td> </tr> }
因為模型對象是強類型(如IEnumerable <Book>),則在循環中每個item對象的類型為Book。除了其他好處,這意味著你會得到編譯時會進行代碼檢查功能和完整的IntelliSense支持。如下圖。
運行程序,然后你會看到如下圖的數據。
小記:最近工作有點忙,所以更新的有點遲了。盡量會寫完的。
文章列表