当前位置:首页 » 其他

.net中的域Area

2015-01-12 13:57 本站整理 浏览(5)

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>