ASP.NET MVC案例教程(二)

來源:互聯網
上載者:User

現在,我們來實現公告系統中的第一個頁面——首頁。它非常簡單,只包括所有公告分類的列表,並且每個清單項目是一個超連結。其中分類資料是用我們的Mock組件得到的。實現後介面如下:

在開始之前,我們要刪幾個東西。因為預設情況下建立一個MVC項目時裡麵包含了幾個樣本頁面,我們要做的就是:

1.將Controllers檔案夾下所有檔案刪除。

2.將Views檔案夾下除了Shared檔案夾和Web.config外的所有檔案刪除,然後將Shared檔案夾裡面的檔案刪除。

完成以上幾步後,就可以開始實現第一個頁面了。

實現控制器

在Controllers檔案夾下建立一個檔案,類型選擇“MVC Controller Class”,名字命名為HomeController.cs。這就是一個控制器類。然後我們為它編碼,具體代碼如下:

HomeController.cs:

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Mvc.Ajax; using MVCDemo.Models; using MVCDemo.Models.Interfaces; using MVCDemo.Models.Entities;namespace MVCDemo.Controllers{    public class HomeController : Controller    {        public ActionResult Index()        {            ICategoryService cServ = ServiceBuilder.BuildCategoryService();            ViewData["Categories"] = cServ.GetAll();            return View("Index");        }    }}

直觀看來,這個類不是很複雜。它首先繼承了Controller類。Controller類是ASP.NET MVC架構中提供的一個控制器積累,所有我們自訂的控制器類都要繼承此基類。然後這個類中有一個Index方法,傳回值類型是ActionResult。

這裡對其中涉及到的概念簡單解釋一下。首先,控制器類可以說是ASP.NET MVC的核心類,因為它將處理一切請求,並處理所有頁面轉寄等表示邏輯,這也是使用了ASP.NET MVC後與傳統ASP.NET應用最大的差別。在傳統模式下,一個使用者請求的url將對應一個aspx檔案,而在ASP.NET MVC下,一個使用者請求對應某個控制器類中的一個方法,而這個方法,就叫做一個Action。至於如何對應的,則是通過對url的解析。

例如,在傳統情況下,http://localhost/Default.aspx表示請求網站根目錄下的Default.aspx檔案。而現在,url可能變成了這種樣子:http://localhost/Home/Index。這個意思就是,請求名叫HomeController控制器類下的Index方法。一般地,預設情況下,請求url的格式為http://localhost/{ControllerName}/{ActionName}。其中{ControllerName}是控制器類名“Controller”前的部分,{ActionName}就是方法名。

當然,這種映射規則是可以更改的,而且請求Action時也可以傳遞參數,但這些都是後話,以後再慢慢討論。

下面再深入Index方法,看看這個Action都做了什麼。它首先調用了商務邏輯組件(當然,是Mock的),然後將GetAll返回的公告分類資料賦予ViewData["Category"],最後調用View()方法返回一個ActionResult。ViewData是什麼呢?你可以把他理解成一個關聯陣列,它儲存需要傳給視圖的資料。而View是Controller類的一個方法,它返回一個ActionResult執行個體。這樣說可能有點抽象,其實直觀就是將某個視圖(一般就是一個aspx檔案)呈現到瀏覽器中。那麼如何知道呈現哪一個視圖呢?預設情況下,View方法會到網站的Views檔案夾下的與控制器類同名的檔案夾下尋找與Action方法同名的視圖。例如,HomeController的Index方法就會尋找Views/Home/Index.aspx,如果找不到,就會到Shared下尋找,再找不到就報錯了。當然,你也可以給View方法傳遞一個字串參數,表示視圖名稱。

實現視圖

上文說到,當請求http://localhost/Home/Index時,HomeController的Index方法會被調用,而Index方法最後要呈現Views/Home/Index.aspx視圖,所以,我們要在Views檔案夾下建立一個Home檔案夾,然後再建立一個Index.aspx視圖。如果您使用的是VS2008 SP1,那麼建立視圖非常方便,只要在Home檔案夾下按右鍵,選Add--->View,然後指定視圖名就可以了。如果不是SP1的,就建立一個Item,類型選擇“MVC View Page”。建立好的視圖其實就是一個aspx頁面,但是其繼承了View。這也是一個基類,所有視圖需要繼承它。

下面給出Index.aspx的代碼:

Index.aspx:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="MVCDemo.Views.Home.Index" %> <%@ Import Namespace="MVCDemo.Models.Entities" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">    <title></title> </head> <body>    <% List<CategoryInfo> categories=ViewData["Categories"] as List<CategoryInfo>; %>    <div>        <h1>MVC公告發布系統</h1>        <ul>            <% foreach (CategoryInfo c in categories)               {                    %>            <li><%= Html.ActionLink(c.Name, "List/" + c.ID, "Announce") %></li>            <% } %>        </ul>    </div></body></html>

大約分析一下。剛才說過,Index這個Action最後呈現這個aspx作為視圖,而且ViewData中包含了要給視圖傳遞的資料。在那裡,我們將所有公告類別資料放在ViewData["Categories"]中。這裡可以看到,我們將這些資料取出,並用來呈現頁面。至於那個Html.Action,這裡先不細說。你只要知道,這個方法可以產生一個連結,其中第一個參數是連結文字,第二個是要連結到的url的Action名,第三個是要連結到的url的控制器名。關於這些,我們以後細細討論。

運行這個例子,並將請求url定位到Home/Index,就可以看到運行效果。

你可能會發現,不需要指定Home/Index,在輸入根目錄後就直接呈現了這個頁面。其實這是因為在預設的路由配置裡,Home和Index是預設的控制器名和Action名。以後我們將會討論路由問題。

小結

通過上面的過程,我們第一個ASP.NET MVC頁面已經能呈現出來了。而且不單純只是一個頁面,其中還呈現了商務邏輯組件返回的資料。

也許,您對其中許多地方還有困惑。不要著急,在下一篇中,我們做這個系統的步伐先緩一緩,我將用一整篇文章,詳細介紹一下ASP.NET MVC中許多重要的概念與原理。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.