关于asp.net mvc 2.0 中 area的用法

最近,看到很多的关注并使用asp.net mvc的网友,都在寻找一种分离网站前后台结构的方法。Asp.net mvc 1.0正式版,并没有给我们提供一种很好的解决方案。对于1.0正式版中,通常的做法,就是用命名前缀来解决的。比如:AdminProductController,UserProductController,ProductController,但是,此类的命名冗长,一旦项目庞大复杂,变得很臃肿难以管理。而且终究不是完美的解决方案。

Asp.net mvc 2.0 preview 1,提供了一种解决方案:area。它是根据项目分离来实现的。所以,不敢保证未来正式版中也是这样,只能说,是临时解决方案。

下面,我将具体列出几个步骤。展示area的用法。

开发环境:VS2008 SP1,ASP.NET MVC 2.0 Preview 1

添加项目的时候,不要添加测试项目,保持清洁。

步骤 0 :

新建一个Web项目,截图:主项目。

clip_image002

clip_image004

步骤1:

在解决方案上新建解决方案文件夹,取名Areas

clip_image006

在Areas解决方案文件夹里,添加一个新的web项目,最后管理员后台项目。

clip_image008

clip_image010

步骤2:

清除Areas下项目不需要的文件:

清除AspnetMvcArea.Web.Admin项目下,一下一些文件:

1. /Content 目录下文件及子文件夹

2. /Scripts 目录下文件及子文件夹

3. /Controllers 下文件及子文件夹

4. /Views 下文件及之文件夹,但保留web.config文件。

5. 删除项目Global文件。

clip_image012

步骤3:

卸载项目:AspnetMvcArea.Web以及AspnetMvcArea.Web.Admin

clip_image014

步骤4:

修改项目文件。

1. 修改主项目:AspnetMvcArea.Web

修改AspnetMvcArea.Web.csproj文件内容,用记事本之类的编辑器打开。

取消一下图中的注解:

A.

clip_image016

B.

clip_image018

2. 修改子项目:AspnetMvcArea.Web.Admin

同上,取消下图中的注解:AspnetMvcArea.Web.Admin.csproj

A.

clip_image020

B.注意,此处的需别。其实,英文写的很清楚了。

clip_image022

保存以上修改,退出。回到vs环境。

步骤5. 重新加载项目。

加载刚才卸载的两个项目。

步骤6. 在子项目上,添加控制器及视图。

1. 添加AccountController,就是为了和主项目默认添加的AccountController名称相同。

2.在AccountController的Action上各自添加视图。

clip_image024

clip_image026

LogOn:

LogOff:

步骤7:添加路由类库

在解决方案上,添加一个类库: AspnetMvcArea.MapRoutes,并新建一个Routes静态类。

clip_image028

注意添加引用的版本:2.0

Routes静态类内部:

clip_image030

步骤8. 在主项目AspnetMvcArea.Web中,添加AspnetMvcArea.Web.Admin和AspnetMvcArea.MapRoutes的引用。

修改主项目AspnetMvcArea.Web中的Global文件

clip_image032

步骤9:在AspnetMvcArea.Web.Admin项目上,修改AccountController控制器的各个视图。

1. Index视图

clip_image034

2. LogOn视图

clip_image036

3. LogOff视图

clip_image038

步骤10,基本以完成大部分了。现在就是修改一个连接。以便测试。

1. 修改主项目Views/Shared/Site.Master

clip_image040

2.修改主项目Views/Shared/LogOnUserControl.ascx

clip_image042

步骤11:完结?

当然,如果真的完成了,那也算完美。可惜。。。运行的时候,发现,area区域找不到视图。

这个是视图定位问题。修改的办法,就是改Areas项目名称以及程序集名称和命名空间。全部和area名称保持一致。

把AspnetMvcArea.Web.Admin项目的名称,程序集名称以及命名空间,全改为和定义的area名称一致:Admin。

在编译项目的时候,会在主项目下,生成Areas文件夹,看下文件夹下的目录就明白了。至此,才算完成。
当然,如果要保持命名规范。可以在不改动程序集名称和命名空间的情况下,只要把area名称改成如:AspnetMvcArea.Web.Admin也可以。就是前台写得时候,麻烦了点。
为了书写上的方便,也可以把area名称保存在一个常量里。
总之一句话:保持area名称和area项目程序集名称一致。命名空间可以不一致。

Ps:注意同步修改Routes静态类下MapAreaRoute方法用到的命名空间参数。

期待下个版本,不用这么麻烦。

posted @ 2009-08-11 11:19 大白 阅读(...) 评论(...) 编辑 收藏