MVC模式可将应用程序的模型(数据)逻辑与其呈现逻辑业务逻辑分离。在ASP.NET MVC中,这种逻辑分离还在项目结构中以物理方式实现,在该项目结构中,控制器和视图保存在使用命名约定定义关系的文件夹中。(模型文件可以不必放在Models文件夹中)此结构可满足大多数Web应用程序的需求。

但是,一些应用程序可能具有大量控制器,而每个控制器又可能与若干个视图关联。对于这些类型的应用程序,默认的ASP.NET MVC项目结构可能不实用。

为了满足大型项目的需要,ASP.NET MVC允许您将Web应用程序划分为较小单元(也称为“区域”)。通过使用区域,可以将大型MVC Web应用程序分成较小的功能分组区域实际上是应用程序内部的一个MVC结构。一个应用程序可能包含若干个MVC结构(区域)。

例如,一个大型电子商务应用程序可能分为若干个区域,这些区域表示店面、产品检查、用户帐户管理和采购系统。每个区域表示整个应用程序的一个独立功能

本演练演示如何在 ASP.NET MVC 应用程序中实现区域。本演练创建一个具有以下区域的博客网站的功能框架:

· 主。 这是 Web 应用程序的入口点。 此区域包括登录页面和登录功能。

· 博客。 此区域用于显示博客文章并搜索存档。

· 面板。 此区域用于创建和编辑博客文章。

 

系统必备

Microsoft Visual Studio 2008 sp1及以上版本。

ASP.NET MVC2框架。Visual Studio 2010自带了。

 

创建应用程序结构

创建一个ASP.NET MVC项目,并为两个子区域(博客和面板)添加文件夹结构。

“新建项目”。

项目类型选择“Web”。

项目模板选择“ASP.NET MVC2 Web应用程序”。

项目命名为“MvcAreasApplication”。选择“创建解决方案的目录”复选框。

单击“确定”。

在“解决方案资源管理器”中,右击项目名称,添加“区域”。

区域名称键入“Blog”,单击“添加”确定。(“区域”文件夹包含一个文件夹结构,其中允许每个子区域具有自己的模型、视图和控制器。)

再新建一个区域“Bashboard”(仪表盘,控制面板)。

完毕。

image

 

添加特定于区域的控制器

接下来,为每个区域添加支持区域的控制器和操作方法。

1、在Blog区域中添加控制器“BlogController”。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcAreasApplication.Areas.Blog.Controllers
{
    public class BlogController : Controller
    {
        //
        // GET: /Blog/Blog/

        //public ActionResult Index()
        //{
        //    return View();
        //}

        public ActionResult ShowRecent()
        {
            return View();
        }

        public ActionResult ShowArchive()
        {
            return View();
        }
    }
}

2、在Dashboard区域中,添加控制器“DashboardController”。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcAreasApplication.Areas.Dashboard.Controllers
{
    public class DashboardController : Controller
    {
        //
        // GET: /Dashboard/Dashboard/

        //public ActionResult Index()
        //{
        //    return View();
        //}

        public ActionResult AddPost()
        {
            return View();
        }

        public ActionResult EditPost()
        {
            return View();
        }

    }
}

 

添加特定于区域的视图

接下来,为每个操作方法添加支持区域的视图。

1、在BlogController类中的ShowRecent操作方法内右击,“添加视图”。

2、向ShowRecent视图中添加内容:

<p>
        <%= Html.ActionLink("Show Archive", "ShowArchive") %>
    </p>

此标记创建一个到ShowArchive操作方法的链接。

3、在ShowArchive方法内右击,添加视图。

4、向ShowArchive视图中添加内容:

<p>
        <%= Html.ActionLink("Show Recent", "ShowRecent") %>
    </p>

5、在DashboardController类,在AddPost操作方法内右击,添加视图。

6、向AddPost视图中添加内容:

<p>
        <%=Html.ActionLink("Edit Post", "EditPost") %>
    </p>

7、在EditPost方法内右击,添加视图。

8、向EditPost视图添加内容:

<p>
        <%=Html.ActionLink("Add Post", "AddPost") %>
    </p>

 

注册区域路由

为项目添加区域时,将在AreaRegistration文件中定义区域的路由。该路由会基于请求URL,将请求发送到相应的区域。若要注册区域的路由,需要在Global.asax文件中添加到可自动在AreaRegistration文件中查找区域路由的代码。

打开Global.asax文件,在Application_Start方法中加入以下代码:

AreaRegistration.RegisterAllAreas();
此代码为每个子区域调用路由注册方法。

 

在区域之间进行链接

在ASP.NET MVC区域应用程序中,可以按照在任何MVC应用程序中的做法来在一个区域内进行链接。例如,可以调用ActionLink方法,或者可以调用采用控制器或操作名称的任何其他例程(例如RedirectToAction方法)。

但是,若要生成到不同区域的链接,你必须用这些方法的routeValues参数显式传递目标区域名称。例如,下面的标记演示了与BlogController类的ShowBlog操作方法的链接。此调用不会标识特定的区域。

<%= Html.ActionLink("Show Blog", "ShowBlog", "Blog") %>

下面的示例演示了如何创建一个链接,该链接标识用routeValues参数传递的匿名对象中的区域。此处显示的示例只作说明之用。不要将该文件添加到项目中。

<%= Html.ActionLink("Show Blog", "ShowBlog", "Blog", new { area = "blog" }, null) %>

注意:最后的 null 参数(在 Visual Basic 中为 Nothing)是必需的,这只是因为具有 routeValues 参数的 ActionLink 方法重载也具有 htmlAttributes 参数。但是,若只是为了能在区域之间进行链接,则无需此参数。

 

向主项目添加内容

当您为本演练创建Visual Studio解决方案时,解决方案模板包括一个充当应用程序的入口点的主视图。在本节的演练中,您将向主视图添加到链接到子区域的选项卡。您还将添加代码以显示诊断信息,包括控制器的名称、操作方法和生成当前视图的区域。

1、打开主视图 Views\Shared\Site.Master

2、在MainContent后插入如下代码。

<p>
    Controller: <%= ViewContext.RouteData.Values["controller"] %><br />
    Action: <%= ViewContext.RouteData.Values["action"] %><br />
    Area: <%= ViewContext.RouteData.DataTokens["area"] %>
</p>

此代码将向视图添加诊断信息。

3、在相同文件中,找到<ul id="menu">,用下面的代码替换之。

<ul id="menu">              
                    <li><%= Html.ActionLink("主页", "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", "Home", new { area=""}, null)%></li>
                </ul>

此代码将添加跨区域进行链接的选项卡。

 

生成和测试应用程序

image

image

image

image

image

image

posted on 2013-03-21 22:08  Louis.Lu.Sz  阅读(357)  评论(0编辑  收藏  举报