MVC之Area相关技术

当在做MVC大型网站时,我们通常会切割成多个模块。但又由于在MVC中如果有Controller名字相同的话,会出错,那如何来解决这个问题呢?微软太人性化了,看下文。

1.新增区域

1)添加区域

2)设置区域名称

3)最后显示

2.默认路由与区域路由的优先级。

我们在打开Global.asax,如下所示

<span style="font-size:18px;">  public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            //注册全部的区域路由
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            //注册路由
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }</span>

其中第一行就是我们的区域路由注册进RouteTable.Routes,正所谓“先注册先赢”,所以我们已经在区域的OrderAreaRegistration.cs定义了某个网址路由。相应的如果两个注册机制交换顺序的画,就会先比对默认的路由。

<span style="font-size:18px;"> public class OrderAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            //对应的路由的地址文件名称
            get
            {
                return "Order";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            //路由的比对规则
            context.MapRoute(
                "Order_default",
                "Order/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }</span>

3.即使使用了区域,仍然可能存在名称冲突

比如在两种路由机制中有了相同的名称话,有时也可能出现冲突,解决办法如下,给指定的路由传入相应的namespace。当指定了命名空间后,MVC就不再会搜索整个网站的类别来寻找Controller,而是利用指定的命名空间去寻找。

<span style="font-size:18px;">public override void RegisterArea(AreaRegistrationContext context)
        {
            //路由的比对规则
            context.MapRoute(
                "Order_default",
                "Order/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional },
                //指定相应的命名空间,因此寻找路由的时候,就不会在发生冲突了
                namespaces: new string[1] { "MvcApplication1.Areas.Order" }
            );
        }</span>

4.路由的高级特性

我们在做开发的时候,如何才能把控制器单独抽离出来来管理呢?什么意思呢?让MVC框架中的Controller来自于一个独自的类来管理,这样方便管理。那么先来了解一下MVC中视图的机制吧!

1.视图机制

分析:我们在上面已经知道MVC的程序入口是Global.asax类下的Application_Start方法,在这里会先注册全部的路由机制,因此当注册完区域路由和默认的路由后,就会去比对发过来的Http请求。此时就会去程序集也就是bin文件下找名字以controller结尾的,并且继承了Controller类的文件,找到后就会采取其中的路由规则一一比对。因此利用这个特性,我们可以单独建立一个类库,然后建立相应的以Controller的类,只不过让程序最终编译进MVC的程序集中即可,这样就可以找到我们的控制器。



时间: 2024-10-12 22:46:20

MVC之Area相关技术的相关文章

mvc Area相关技术

ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规则去组织model实体层,views视图层和控制层的.如果是大规模的应用程序,经常会由不同功能的模块组成,而每个功能模块都由MVC中的三层所构成,因此,随着应用程序规模的增大,如何组织这些不同功能模块中的MVC三层的目录结构,有时对开发者来说显得是种负担. 幸运的是,ASP.NET MVC允许开发者将应用划分为"区域"(Area)的概念,每个区域都是按照asp.net mvc的规定对文件目录结构和类的命名规则进行命名.在本文中

(转)mvc Area相关技术

转自: http://www.cnblogs.com/zgqys1980/archive/2012/08/22/2650774.html ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规则去组织model实体层,views视图层和控制层的.如果是大规模的应用程序,经常会由不同功能的模块组成,而每个功能模块都由MVC中的三层所构成,因此,随着应用程序规模的增大,如何组织这些不同功能模块中的MVC三层的目录结构,有时对开发者来说显得是种负担. 幸运的是,ASP.NET MVC允许开发者将

MVC笔记 Controller相关技术

一.Controller的责任 MVC的核心就是Controller(控制器),它负责处理浏览器传送过来的所有请求,并决定要将什么内容响应给浏览器.但Controller并不负责决定内容应该如何显示,而是将特定形态的内容响应给MVC架构,最后才由MVC架构依据响应的形态来决定如何将内容响应给浏览器.如何决定响应内容是View的责任. 二.Controller的类与方法 Controller本身就是一个类(Class),该类有许多方法(Method).在这些方法中,只要是公开方法,该方法就会被视为

ASP.NET MVC中Model相关技术

在Model里的程序,由于“只能”跟数据与商业逻辑有关,因此Model专注于如何有效地提供数据访问机制.交易环境.数据格式.商业逻辑验证等工作. 一.使用Code First创建数据模型 数据库开发模式有数据库优先开发模式(Database First Development).模型优先开发模式(Model First Development)和程序代码优先开发模式(Code First Development)这三种.ASP.NET MVC的Model数据库开发模式为程序代码优先开发模式,使用

[MVC]Area区域相关技术

MVC提供Area机制,在同一个项目之内就能够切割出不同的ASP.NET MVC网站. 插入:首先在相同的位置,比如说同一个文件夹(如:Controllers)是不能创建俩个相同名称的文件(如:HomeController),其次在不同的文件夹中如fold1和fold2,中各自创建一个TestController,程序能够通过编译,但当浏览器视图执行/Test时,网站报出异常,如图: 因为在默认情况下,路由会同时匹配两个controller,造成无法访问. 在项目上,右键,创建区域,问题解决.

Asp.Net WebAPI及相关技术介绍(含PPT下载)

此PPT讲述了Asp.Net WebAPI及相关Web服务技术发展历史. 共80多页,Asp.Net WebAPI在讲到第36页的时候才会出现,因为这个技术不是凭空产生的,它有着自己的演变进化的历史.我们要先弄清它从哪里来的?然后再说它能做什么事. 这个PPT涉及到的技术名词有: XML-RPC,SOAP,REST, SOA Asp.Net WebForm,WebService, WCF Asp.Net WebAPI, Asp.Net MVC,JSON Asp.Net Routing, MVVM

j2e应用相关技术

j2e应用相关技术 轻量级j2e应用以传统的jsp作为变现层技术,以一系列开源框架作为MVC层,中间件,持久层解决方案,并将这些开源框架有机组合在一起,使得j2e具有高度的可扩展性,可维护性. servlet,jsp,javabean:现在来说纯粹的Servlet已经很少使用了,往往都是使用jsp来做表示层,也就是说我们每天说的页面.Servlet和Jsp其实是完全统一的,二者在底层的运行原理是完全一样的,在实际运行中,JSP必须被web服务器编译成servlet,真正在web服务器中运行的是S

JEE相关技术浅析

1.1  JEE相关技术浅析 JEE是基于java的web相关技术的统称,包括html.javascript.css.jsp.servlet.struts.spring.hibernate.java.ejb等.为了实现程序的灵活性,采用MVC(Model.View.Controller)的设计模式,将应用分为展现层.业务逻辑层.模型层三个方面. (1)展现层:html.javascript.css属于展现层.html属于纯展示部分,所有操作最终需要合并成html并通过web浏览器展示出来:css

SAAS相关技术要点

这篇文章本来是我们开发组内部用的一个小文档.因为我们公司以前没有做SAAS的经验,就成立了一个小组做一做这方面的技术前探,我是成员之一.这篇文档想从宏观的层面把开发一个SAAS应用所要用到的技术点稍微梳理一下,便于指导后面的技术前探工作.之所以发在这里,是因为自己相关的研发经验太缺乏,可能有些技术盲点是自己根本没能考虑到的,希望园子里的各位大牛多多指导. 一.聚焦“三头怪” 在MS的官方文档中,把构建一个足够成熟的SAAS(MS简单列出了SAAS应用的4级成熟度)所面临的3个主要挑战:可配置性,