演练:使用区域组织 ASP.NET MVC 应用程序
2013-03-21 22:08
393 查看
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”(仪表盘,控制面板)。
完毕。
添加特定于区域的控制器
接下来,为每个区域添加支持区域的控制器和操作方法。
1、在Blog区域中添加控制器“BlogController”。
2、在Dashboard区域中,添加控制器“DashboardController”。
添加特定于区域的视图
接下来,为每个操作方法添加支持区域的视图。
1、在BlogController类中的ShowRecent操作方法内右击,“添加视图”。
2、向ShowRecent视图中添加内容:
此标记创建一个到ShowArchive操作方法的链接。
3、在ShowArchive方法内右击,添加视图。
4、向ShowArchive视图中添加内容:
5、在DashboardController类,在AddPost操作方法内右击,添加视图。
6、向AddPost视图中添加内容:
7、在EditPost方法内右击,添加视图。
8、向EditPost视图添加内容:
注册区域路由
为项目添加区域时,将在AreaRegistration文件中定义区域的路由。该路由会基于请求URL,将请求发送到相应的区域。若要注册区域的路由,需要在Global.asax文件中添加到可自动在AreaRegistration文件中查找区域路由的代码。
打开Global.asax文件,在Application_Start方法中加入以下代码:
此代码为每个子区域调用路由注册方法。
在区域之间进行链接
在ASP.NET MVC区域应用程序中,可以按照在任何MVC应用程序中的做法来在一个区域内进行链接。例如,可以调用ActionLink方法,或者可以调用采用控制器或操作名称的任何其他例程(例如RedirectToAction方法)。
但是,若要生成到不同区域的链接,你必须用这些方法的routeValues参数显式传递目标区域名称。例如,下面的标记演示了与BlogController类的ShowBlog操作方法的链接。此调用不会标识特定的区域。
下面的示例演示了如何创建一个链接,该链接标识用routeValues参数传递的匿名对象中的区域。此处显示的示例只作说明之用。不要将该文件添加到项目中。
注意:最后的 null 参数(在 Visual Basic 中为 Nothing)是必需的,这只是因为具有 routeValues 参数的 ActionLink 方法重载也具有 htmlAttributes 参数。但是,若只是为了能在区域之间进行链接,则无需此参数。
向主项目添加内容
当您为本演练创建Visual Studio解决方案时,解决方案模板包括一个充当应用程序的入口点的主视图。在本节的演练中,您将向主视图添加到链接到子区域的选项卡。您还将添加代码以显示诊断信息,包括控制器的名称、操作方法和生成当前视图的区域。
1、打开主视图 Views\Shared\Site.Master
2、在MainContent后插入如下代码。
此代码将向视图添加诊断信息。
3、在相同文件中,找到<ul id="menu">,用下面的代码替换之。
此代码将添加跨区域进行链接的选项卡。
生成和测试应用程序
但是,一些应用程序可能具有大量控制器,而每个控制器又可能与若干个视图关联。对于这些类型的应用程序,默认的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”(仪表盘,控制面板)。
完毕。
添加特定于区域的控制器
接下来,为每个区域添加支持区域的控制器和操作方法。
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>
此代码将添加跨区域进行链接的选项卡。
生成和测试应用程序
相关文章推荐
- 使用区域组织 ASP.NET MVC 应用程序
- 演练:使用 XCOPY 部署 ASP.NET Web 应用程序
- 译文:使用MVC5的Entity Framework 6入门(九)——为ASP.NET MVC应用程序使用异步及存储过程
- 译文:使用MVC5的Entity Framework 6入门(十二)——为ASP.NET MVC应用程序使用高级功能
- [12] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序使用高级功能
- 使用Installshield2009 在IIS6部署Asp.net mvc 应用程序
- [06] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序创建更复杂的数据模型
- [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序实现继承
- 使用IdleTest进行TDD单元测试驱动开发演练(3) 之 ASP.NET MVC
- 创建一个区域(Creating an Area) |使用区域 | 高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼
- [转]使用 ASP.NET MVC 创建一个任务列表应用程序
- 译文:使用MVC5的Entity Framework 6入门(六)——为ASP.NET MVC应用程序创建更复杂的数据模型
- asp.net mvc使用TagBuilder的应用程序集
- 使用IdleTest进行TDD单元测试驱动开发演练(3) 之 ASP.NET MVC
- 使用Metrics.NET 构建 ASP.NET MVC 应用程序的性能指标
- ASP.NET MVC应用程序使用异步及存储过程
- [07] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序读取相关数据
- [译]ABP框架使用AngularJs,ASP.NET MVC,Web API和EntityFramework构建N层架构的SPA应用程序
- 填充区域 (Populating an Area) | 使用区域 | 高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼
- 译文:使用MVC5的Entity Framework 6入门(十一)——为ASP.NET MVC应用程序实现继承