ASP.NET MVC允许使用Area(区域)来组织web应用程序,每个Area代表应用程序的不同功能模块。这对于大工程非常有用,Area使每个功能模块都有各自的文件夹,文件夹中有自己的Controller、View和Model。比如说,一个项目分为三个模块,分别是(Customer、Order、User),那么用mvc 的area是这样建立的。
添加一个Area
首先用VS新建一个MVC的解决方案。在解决方案中,鼠标右键点击添加区域。
在弹出的对话框中输入区域的名字
对于其他模块重复以上动作就可以了,最后我们得到的结构是这样的:
注册Area
每一个area的注册文件都是继承自AreaRegistration类的,比如UserAreaRegistration的类的代码是这样的:
<span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:12px;">using System.Web.Mvc;
namespace mvcdemo.Areas.User
{
public class UserAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "User";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"User_default",
"User/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
}
</span>
并且在Global.asx文件中会发现Application_Start事件中有以下方法:
<span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:12px;">protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}</span>
Areas之间的调用
关于Area之间的调用,可以分为三种情况:第一种是在当前Area生成指向当前Area的链接;第二种是生成指向其他Area的链接;第三种是在某个Area中生成指向根目录的链接。下面是这三种情况生成链接的方法:
(1)如果要在Area中生成当前Area的URL链接,可以这样写:
<span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:12px;">@Html.ActionLink("Add", "BasicInfo")</span>
(2)如果要生成其他Area的URL链接,则需要在Html.ActionLink方法的匿名参数中使用一个名为area的变量来指定要生成链接的Area名称,可以这样写:
<span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:12px;">@Html.ActionLink("Click me to go to another area", "Index", new { area = "Customer" })</span>
(3)如果要在当前Area生成指向根目录某个Controller的链接,那么只要把area变量变为空字符串就行,可以这样写:
<span style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:12px;">@Html.ActionLink("Click me to go to top-level part", "Index", new { area = "" })</span>