分享

演练:使用区域组织 ASP.NET MVC 应用程序

 ThinkTank_引擎 2014-05-13

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

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

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

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

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

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

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

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

为了使本课程简单起见,这些区域不包含用于执行博客的实际任务的逻辑。

与本主题对应的包含源代码的 Visual Studio 项目可从 Download(下载)网页获得。

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

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

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

Blog 区域中的任何地方,此链接都会按照预期方式发挥作用。 但是,如果将上述链接添加到 Dashboard 区域内的视图中,则该链接将失败。 这是因为 ASP.NET MVC 框架在 Dashboard 区域中将无法找到 BlogController 类。

下面的示例演示了如何创建一个链接,该链接标识用 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. 紧接在 <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>
    
    
    

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

  3. 在相同文件中,找到 <ul id="menu"> 元素,然后用以下代码替换整个元素:

    <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>
    
    
    

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多