在上一篇文章中咱們已經建立了實體類,在這一篇文章中,我將建立一個新的控制器類——BookController,使用BookController對Books表中的數據進行CURD操做的方法,並使用視圖模板在瀏覽器中顯示所查詢到的書籍數據信息。 html
1、添加控制器類數據庫
在Visual Studio 的「解決方案資源管理器」中右鍵單擊Controllers文件夾,並建立一個新的BookController控制器類。以下圖。瀏覽器
Visual Studio 會彈出一個「添加控制器」對話框(以下圖)。服務器
在對話框中填寫以下數據編輯器
•控制器名稱:BookController。 (能夠進行修改,以下圖是默認的Default1Controller,修改成BookController。)
•模板:包含讀/寫操做和視圖MVC控制器(使用Entity Framework)。
•模型類:Book(MvcApplication1.Models)。
•數據上下文類:BookDBContext(MvcApplication1.Models)。
•視圖:Razor(CSHTML)。 (默認設置。)spa
在填寫完以上數據以後,用鼠標左鍵單擊「添加」按鈕。Visual Studio會快速建立下列文件和文件夾:
1)在項目中的Controllers文件夾中建立一個BookController.cs文件。以下圖中的1處。
2)在項目的Views文件夾中建立一個Book文件夾。同時在Book文件夾中建立如下文件 Create.cshtml , Delete.cshtml , Details.cshtml , Edit.cshtml和Index.cshtml。以下圖中的2處。code
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表是一張空表,沒有任何數據。以下圖。htm
2、建立書籍
1) 用鼠標左鍵,點擊「Create New」連接,瀏覽器會導航到新建頁面,在此頁面中輸入有關書籍的一些數據,而後點擊「Create」按鈕。以下圖1,與圖2.對象
圖1blog
圖2
2) 當使用鼠標左鍵點擊「Create」按鈕時,瀏覽器會把表單數據發送到服務器上,服務器程序會把剛纔填寫的書籍信息保存到數據庫中。而後瀏覽器會自動重定向到書籍列表的網址(http://localhost:36878/book),在那個頁面就能夠看到新建立的書籍數據,已經存在了。以下圖。
3、編輯書籍
對剛纔建立的書籍數據進行修改。在一條書籍記錄的最後面有三個連接,分別是Edit、Details、Deltet。 以下圖。
1) 用鼠標左鍵點擊「Edit」連接。會瀏覽器會自動轉到編輯界面。在編輯頁面中修改完數據,點擊「Save」按鈕,即把修改的數據保存到數據庫。以下圖。
2) 2用鼠標左鍵點擊「Details」連接。會瀏覽器會自動轉到詳細信息界面。以下圖。圖1,圖2。
圖1
圖2
4、對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視圖,而後呈如今瀏覽器,讓用戶看到。
5、強類型對象和@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支持。以下圖。
運行程序,而後你會看到以下圖的數據。
小記:最近工做有點忙,因此更新的有點遲了。儘可能會寫完的。