文章出處

       在上一篇文章中我們已經創建了實體類,在這一篇文章中,我將創建一個新的控制器類——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),在那個頁面就可以看到新創建的書籍數據,已經存在了。如下圖。

 

三、編輯書籍

對剛才創建的書籍數據進行修改。在一條書籍記錄的最后面有三個鏈接,分別是EditDetailsDeltet。 如下圖。

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支持。如下圖。

 

 

運行程序,然后你會看到如下圖的數據。

 

 

 

 

小記:最近工作有點忙,所以更新的有點遲了。盡量會寫完的。

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()