|
MVC 模式可將應(yīng)用程序的模型(數(shù)據(jù))邏輯與其呈現(xiàn)邏輯和業(yè)務(wù)邏輯分離。 在 ASP.NET MVC 中,這種邏輯分離還在項(xiàng)目結(jié)構(gòu)中以物理方式實(shí)現(xiàn),在該項(xiàng)目結(jié)構(gòu)中,控制器和視圖保存在使用命名約定定義關(guān)系的文件夾中。 此結(jié)構(gòu)可滿足大多數(shù) Web 應(yīng)用程序的需求。 但是,一些應(yīng)用程序可能具有大量控制器,而每個(gè)控制器又可能與若干個(gè)視圖關(guān)聯(lián)。 對于這些類型的應(yīng)用程序,默認(rèn)的 ASP.NET MVC 項(xiàng)目結(jié)構(gòu)可能不實(shí)用。 為了滿足大型項(xiàng)目的需要,ASP.NET MVC 允許您將 Web 應(yīng)用程序劃分為較小單元(也稱為“區(qū)域”)。 通過使用區(qū)域,可以將大型 MVC Web 應(yīng)用程序分成較小的功能分組。 區(qū)域?qū)嶋H上是應(yīng)用程序內(nèi)部的一個(gè) MVC 結(jié)構(gòu)。 一個(gè)應(yīng)用程序可能包含若干個(gè) MVC 結(jié)構(gòu)(區(qū)域)。 例如,一個(gè)大型電子商務(wù)應(yīng)用程序可能分為若干個(gè)區(qū)域,這些區(qū)域表示店面、產(chǎn)品檢查、用戶帳戶管理和采購系統(tǒng)。 每個(gè)區(qū)域表示整個(gè)應(yīng)用程序的一個(gè)獨(dú)立功能。 本演練演示如何在 ASP.NET MVC 應(yīng)用程序中實(shí)現(xiàn)區(qū)域。 本演練創(chuàng)建一個(gè)具有以下區(qū)域的博客網(wǎng)站的功能框架: 主。 這是 Web 應(yīng)用程序的入口點(diǎn)。 此區(qū)域包括登錄頁面和登錄功能。 博客。 此區(qū)域用于顯示博客文章并搜索存檔。 面板。 此區(qū)域用于創(chuàng)建和編輯博客文章。
為了使本課程簡單起見,這些區(qū)域不包含用于執(zhí)行博客的實(shí)際任務(wù)的邏輯。 與本主題對應(yīng)的包含源代碼的 Visual Studio 項(xiàng)目可從 Download(下載)網(wǎng)頁獲得。 在 ASP.NET MVC 區(qū)域應(yīng)用程序中,可以按照在任何 MVC 應(yīng)用程序中的做法來在一個(gè)區(qū)域內(nèi)進(jìn)行鏈接。 例如,可以調(diào)用 ActionLink 方法,或者可以調(diào)用采用控制器或操作名稱的任何其他例程(例如 RedirectToAction 方法)。 但是,若要生成到不同區(qū)域的鏈接,您必須用這些方法的 routeValues 參數(shù)顯式傳遞目標(biāo)區(qū)域名稱。 例如,下面的標(biāo)記演示了與 BlogController 類的 ShowBlog 操作方法的鏈接。 此調(diào)用不會(huì)標(biāo)識(shí)特定的區(qū)域。 <%= Html.ActionLink("Show Blog", "ShowBlog", "Blog") %> 在 Blog 區(qū)域中的任何地方,此鏈接都會(huì)按照預(yù)期方式發(fā)揮作用。 但是,如果將上述鏈接添加到 Dashboard 區(qū)域內(nèi)的視圖中,則該鏈接將失敗。 這是因?yàn)?ASP.NET MVC 框架在 Dashboard 區(qū)域中將無法找到 BlogController 類。 下面的示例演示了如何創(chuàng)建一個(gè)鏈接,該鏈接標(biāo)識(shí)用 routeValues 參數(shù)傳遞的匿名對象中的區(qū)域。 此處顯示的示例只作說明之用。 不要將該文件添加到項(xiàng)目中。
<%= Html.ActionLink("Show Blog", "ShowBlog", "Blog", new { area = "blog" }, null) %>
注意 |
|---|
最后的 null 參數(shù)(在 Visual Basic 中為 Nothing)是必需的,這只是因?yàn)榫哂?routeValues 參數(shù)的 ActionLink 方法重載也具有 htmlAttributes 參數(shù)。 但是,若只是為了能在區(qū)域之間進(jìn)行鏈接,則無需此參數(shù)。 |
向主項(xiàng)目添加內(nèi)容當(dāng)您為本演練創(chuàng)建 Visual Studio 解決方案時(shí),解決方案模板包括一個(gè)充當(dāng)應(yīng)用程序的入口點(diǎn)的主視圖。 在本節(jié)的演練中,您將向主視圖添加到鏈接到子區(qū)域的選項(xiàng)卡。 您還將添加代碼以顯示診斷信息,包括控制器的名稱、操作方法和生成當(dāng)前視圖的區(qū)域。 向主項(xiàng)目添加內(nèi)容打開主視圖 (Views\Shared\Site.Master)。 緊接在 <asp:ContentPlaceHolder ID="MainContent" runat="server" /> 元素之后插入以下代碼。
<p>
Controller: <%= ViewContext.RouteData.Values["controller"] %><br />
Action: <%= ViewContext.RouteData.Values["action"] %><br />
Area: <%= ViewContext.RouteData.DataTokens["area"] %>
</p>
此代碼將向視圖添加診斷信息。 在相同文件中,找到 <ul id="menu"> 元素,然后用以下代碼替換整個(gè)元素:
<ul id="menu">
<li><%= Html.ActionLink("Home", "Index", "Home", new { area = "" }, null)%></li>
<li><%= Html.ActionLink("Blog", "ShowRecent", "Blog", new { area = "blog" }, null)%></li>
<li><%= Html.ActionLink("Dashboard", "AddPost", "Dashboard", new { area = "dashboard" }, null)%></li>
<li><%= Html.ActionLink("About", "About", "Home", new { area = "" }, null)%></li>
</ul>
此代碼將添加跨區(qū)域進(jìn)行鏈接的選項(xiàng)卡。
|