使用mvc2里面的area让网站更有条理

最近装了mvc2 pr2版本,看了下说明文档,里面着重提示说更新了area项目,因此着重看了一下。若干心的,和大家共享,有错没错,欢迎大家拍砖。

没有Areas前相同问题的处理 

在mvc1.0时代,如果要将网站按目录结构来区分。例如

Website/Index

Admin/ Index

User/ Index

……/……

通常都是在Views下面建立若干个和Controller相对应的目录,然后在里面放置aspx页面

Views\Website\Index

Views\Admin\Index

Views\User\Index

Views\.......\.......

这样建立若干个目录

其实这样也没什么不好,唯一不好的可能就是随着业务的需要,结构需求会越来越多,views目录下面的文件夹越来越多,更或者你需要更细结构的页面路径,例如:

Website/Product/Index

Website/Catalog/Index

Website/Contect/Index

当然,你可以用UrlRouteing或者ViewEngine搞定这些问题。但是毫无疑问,随着网站的运行日久,同一个Controller目录下的文件会越来越多,对于同一个Controller下的ActionResult的命名和UrlRouting里面的维护带来不小的麻烦。给管理带来不方便【个人理解】。

现在出Areas之后,这个问题有所缓解。还是如上的Url

Website\Product\Index

Website\Catalog\Index

Website\Order\Index

Website\Contact\Index

可以使用mvc2.0新增的Area来解决这个问题

建立项目 

首先,用mvc2建立一个新项目,在网站根目录下建立Areas文件夹,在Areas文件夹建立你要区分的目录,例如本例的Website,然后继续在Website目录下增加Views目录,继续在views目录下增加需要分类管理Controller目录和建立aspx文件。使文件结构形成

Areas\Website\Views\Product

Areas\Website\Views\ Catalog

Areas\Website\Views\ Order

Areas\Website\Views\ Contact

到原有默认的views目录将web.config复制到现在的新的views目录,你甚至现在可以把原有的views目录删除掉

建立Areas区域UrlRouting

随便找个地方,建立一个新的类,继承AreaRegistration实现抽象类

Code
namespace Valor.Asmyna.Areas.Website

{

    /**//// <summary>

    /// WebsiteArea

    /// </summary> 

    public class WebsiteArea : AreaRegistration

    {

        public override string AreaName

        {

            get { return "Website"; }

        }

 

        public override void RegisterArea(AreaRegistrationContext context)

        {

            context.MapRoute(

                "Website_Default",

                "Website/{controller}/{action}/{id}",                           // URL with parameters

                new { controller = "Home", action = "Index", id = "" }

                );

        }

    }

 

}

修改Global.sas

        protected void Application_Start()

{

AreaRegistration.RegisterAllAreas();//注册区域Url规则,注意先后顺序

RegisterRoutes(RouteTable.Routes);

}

为区域页面建立Controller类

为区域页面建立Controller类没什么区别,可以建立在另外一个外部类库项目上,唯一需要注意的就是命名空间需要和注册Area规则的类的命名空间的前导一致。我们知道,在不使用Areas的时候Controller是不受namespace约束的。也就是说只要你有一个Controller名,而不管他在哪个命名空间下都是可以起作用的,如果我们在不同的命名空间建立2个相同的Controller类名,编译的时候不会出错,但是运行mvc网站的时候会提示存在2个相同的Controller类,系统不知道使用哪个。但是Areas却有所限制,他一定要命名空间的前导和AreaRegistration类得命名空间相同。例如:我建立的AreaRegistration网站项目命名空间为Valor.Asmyna.Areas.Website然后我将Controller分开作为一个独立的类库,如果我随便写一个命名空间空间,这个Controller对于Area里面的views是不起作用的,但是他却对原始Views目录的Controller起作用,只有将他的命名空间设置成Valor.Asmyna.Areas.Website.xxx.xxx的前导才起作用

Code
namespace Valor.Asmyna.Areas.Website

{

public class HomeController : Controller

{

public ActionResult Index()

{

ViewData["title"] = "Website/Home/Index";

return View();

}

}

public class ProductController : Controller

{

public ActionResult Index()

{

ViewData["title"] = "Website/Product/Index";

return View();

}

}

public class ContentController : Controller

{

public ActionResult Index()

{

ViewData["title"] = "Website/Content/Index";

return View();

}

}

}

Ok,到浏览器测试一下看看

Area结构完全一致会出现的问题

我们继续在Area目录下增加一个Home目录,在他的Veiws目录下也增加三个相同的controller目录

直接在刚才注册Website AreaRegistration命名空间为他注册一个Area规则,用默认系默认的Controller为Home.,

对2个路径进行访问:

/Website/Product

/Home/Product

这个时候controller对于这2个area目录的views都能起作用。在页面打印得到的结果一致

.

显然这样是不对的.由此我们刚才想到Area的Controller的选择名命名空间限制问题。那我们他们分开来注册看看。修改Home区域的AreaRegistration的命名空间和在为HomeArea建立一个Controller类,使他们的命名空间一致。这次我们用Valor.Asmyna.Areas.Website

Code
namespace Valor.Asmyna.Areas.Home

{

public class HomeController : Controller

{

public ActionResult Index()

{

ViewData["title"] = "Home/Content/Index";

return View();

}

}

public class ProductController : Controller

{

public ActionResult Index()

{

ViewData["title"] = "Home/Content/Index";

return View();

}

}

public class ContentController : Controller

{

public ActionResult Index()

{

ViewData["title"] = "Home/Content/Index";

return View();

}

}

}

namespace Valor.Asmyna.Areas.Home

{

public class HomeController : Controller

{

public ActionResult Index()

{

ViewData["title"] = "Home/Home/Index";

return View();

}

}

public class ProductController : Controller

{

public ActionResult Index()

{

ViewData["title"] = "Home/Product/Index";

return View();

}

}

public class ContentController : Controller

{

public ActionResult Index()

{

ViewData["title"] = "Home/Content/Index";

return View();

}

}

}

编译之后访问,各自分别为自己的Controller处理了

Home/Product

Website/Product

本例demo下载 可以打印Word格式下载

转载于:https://www.cnblogs.com/dudu837/archive/2010/12/11/1902893.html

使用mvc2里面的area让网站更有条理相关推荐

  1. vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别(上)

    http://www.cnblogs.com/iceicebaby/archive/2012/02/21/2361558.html 一:先来看看  新建网站  里面的  ASP.NET 网站的建立过程 ...

  2. vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)

    地址:http://www.cnblogs.com/iceicebaby/archive/2012/02/21/2361686.html 二:下面是 通过 新建项目 来创建 ASP.NET web 应 ...

  3. [转]如何让虚拟目录里面的webconfig不继承网站

    如何让虚拟目录里面的webconfig不继承网站 今天要部署一个网站和一个和网站相关的webservices接口,我把网站部署后,就把WEB接口作为它下面的一个虚拟目录来处理了,这样他们可以共享一个域 ...

  4. 讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute

    正文 ASP.NET Core MVC 2.1 特意为构建 HTTP API 提供了一些小特性,今天主角就是 ApiControllerAttribute. 0. ApiControllerAttri ...

  5. thinkphp url去掉index.php,thinkphp 去掉URL 里面的index.php(?s=)

    例如你的原路径是 http://localhost/test/index.php/home/goods/index.html 那么现在的地址是 http://localhost/test/home/g ...

  6. nginx里面的rewrite重写模块详解

    文章目录 前言 Rewrite Rewrite实用场景 Nginx正则表达式(又有正则了啊) Rewrite命令 last和break比较有什么不同? Location模块 location有哪些分类 ...

  7. OAuth2.0 里面的 state 参数是干什么的?

    OAuth2.0 里面的 state 参数是干什么的? 1.OAuth 2.0 的四种方式 授权码 常见于个人用户第三方登录,比如通过微信.QQ.钉钉登录第三方应用.获取临时的access_token ...

  8. 【转】【译】让你的网站更炫酷的一些小 tips

    原文链接 : 101 Ways to Make Your Website More Awesome 原文作者 : Nicholas Tart 译文出自 : 掘金翻译计划 译者 : 达仔 译文链接:ht ...

  9. 把游戏里面的 UI 做成前端组件库会怎么样?

    在研究生的时候用 Vue2.0 做过一个守望先锋UI库. 当时很沉迷<守望先锋>,有一天突发奇想:我要把游戏里面的 UI 做成前端组件库会怎么样? 然后就一步步开始做了,最后也算把它给实现 ...

  10. 让你的网站更炫酷的一些小 tips

    本文讲的是让你的网站更炫酷的一些小 tips, 上周,我和一位老客户聊天,她说:"尼克,我觉得我的网站需要改进,但我不能确定我具体需要做什么." 然后我就去问了一圈,包括朋友.家人 ...

最新文章

  1. 大厂技术文档:Redis+Nginx+Spring全家桶+Dubbo精选
  2. java 写文件的三种方法比较
  3. 深入浅出,Handler机制外科手术式的剖析(ThreadLocal,Looper,MessageQueen,Message)(上)...
  4. 老李分享:Web Services 组件 1
  5. 杜比收购低延迟流媒体平台Millicast
  6. 重点客户销售数据分析python_药品销售数据分析--python
  7. [html] 实现九宫格布局
  8. java daemon线程的作用_JAVA DAEMON线程的理解
  9. codeforces-148D-Bag of mice-概率DP
  10. SQL Server 2008 R2 中英文 开发版/企业版/标准版 链接地址
  11. 如何成为一名出色的演说者
  12. MySQL 宣布停止使用 master、slave!
  13. 移动滑块改变使用容量
  14. 一个简单mvp安卓应用的设计
  15. ExtJS 教程汇总
  16. 北京的购车摇号新政的概率分析
  17. IPFS系列 - 体验 IPFS Docker
  18. 测试面试题-如何测试朋友圈
  19. cocos2dx-lua-andriond腾讯应用宝游戏接入错误汇总
  20. 中专计算机基础期末考试题,职业中专第一学期计算机应用基础WIN7和Word2010版期末考试题.doc...

热门文章

  1. php分页类 seo,哪种分页url对seo友好?
  2. python程序停止运行、重新开始_求教,程序执行到末尾如何重新开始的问题。
  3. Java发送https请求,综合post请求,get请求,获取网络返回的信息
  4. c++小学期大作业攻略(二)整体思路+主界面
  5. 【洛谷P4219】【BJOI2014】—大融合(线段树合并)
  6. node csrf 防御 待续
  7. 知识、经验的漏洞还有很多很多
  8. Codefroces 762A k-th divisor 数论
  9. [转]Visual Studio 各版本区别
  10. 进程部分(IPC机制及生产者消费者模型)和线程部分