zoukankan      html  css  js  c++  java
  • 演练:使用区域组织 ASP.NET MVC 应用程序

    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

  • 相关阅读:
    I
    poj 3414 pots (bfs+路径记录)
    hdoj 1495 非常可乐(bfs)
    hdoj 1241 Oil Deposits (dfs)
    hdoj 2612 find a way (两次bfs)
    poj 3984 迷宫问题
    poj 3087 Shuffle'm Up (bfs)
    poj 3126 Prime Path (bfs)
    poj 3279 Fliptile
    hdu_3068 最长回文(Manacher算法)
  • 原文地址:https://www.cnblogs.com/luqingfei/p/2974418.html
Copyright © 2011-2022 走看看