MVC4 中使用 Area 和 注意的地方
在MVC项目中经常会使用到Area来分开不同的模块让项目结构更加的清晰。
步骤如下:
项目 –> 添加 -> 区域 (Area)
输入 Admin
添加成功后
Area包含:
创建一个空MVC工程结构类似,Admin Area 有自己的 Controllers、Models 和 Views 文件夹,不一样的地方就是多了一个 AdminAreaRegistration.cs 文件,这个文件中定义了一个叫 AdminAreaRegistration 的类,它的内容如下:
根目录可以放一套一样的结构用来做前端开发使用,而admin 目录一般会作为管理员后台来开发!
AdminAreaRegistration.cs 文件,这个文件中定义了一个叫 AdminAreaRegistration 的类,它的内容如下:
namespace MvcApp4.Areas.Admin{public class AdminAreaRegistration : AreaRegistration{public override string AreaName{get{return "Admin";}}public override void RegisterArea(AreaRegistrationContext context){context.MapRoute("Admin_default","Admin/{controller}/{action}/{id}",new { controller = "home", action = "Index", id = UrlParameter.Optional },namespaces: new[] { "MvcApp4.Areas.Admin.Controllers" } //指定该路由查找控制器类的命名空间 );}}}
在这里需要注意需加入 Areas 所在的命名空间,来控制 controllers 接收的参数,不然访问会出现错误,往下一点会提到。
namespaces: new[] { "MvcApp4.Areas.Admin.Controllers" } AreaRegistrationContext 类的 MapRoute 方法和 App_Start-> RouteConfig.cs 的 MapRoute 方法的使用是一样的,只是区分Area 目录下的路由控制!
在 Global.asax 中的 Application_Start 方法会自动加了这样一句代码
protected void Application_Start() {AreaRegistration.RegisterAllAreas();WebApiConfig.Register(GlobalConfiguration.Configuration);FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);}
调用 AreaRegistration.RegisterAllAreas 方法让MVC应用程序在启动后会寻找所有继承自 AreaRegistration 的类,并为每个这样的类调用它们的 RegisterArea 方法。
下面我们来做一个 Demo
新建两个访问连接,内容都是一样,都是简单输出一个 "hello World"
URL定位到 (areas/admin)
http://localhost:18291/Admin/Home/Index
URL定位到(根目录)
http://localhost:18291/Home/Index
public class HomeController : Controller{//// GET: /Admin/Home/public ActionResult Index(){return Content("hello world");}}
如果刚才没有加入:
namespaces: new[] { "MvcApp4.Areas.Admin.Controllers" }
运行后就会出现如下错误:
但是如果我们把根目录下的 /Home/Index 的内容输出改成 “Root Say hello World” , 你会发现还是输出 “hello World”,
这是就是 Controller的歧义问题
这就是我们需要注意的另一个地方
我们需要在App_start下的 RouteConfig.cs 也要增加一个 namespaces 来声明 Controller 访问的命名空间!
//App_start下的 RouteConfig.cs public class RouteConfig{public static void RegisterRoutes(RouteCollection routes){routes.IgnoreRoute("{resource}.axd/{*pathInfo}");routes.MapRoute(name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },namespaces: new[] { "MvcApp4.Controllers" }//指定该路由查找控制器类的命名空间 controllers );}}//areas 下的 \Admin\AdminAreaRegistration.cs public class AdminAreaRegistration : AreaRegistration{public override string AreaName{get{return "Admin";}}public override void RegisterArea(AreaRegistrationContext context){context.MapRoute("Admin_default","Admin/{controller}/{action}/{id}",new { controller = "home", action = "Index", id = UrlParameter.Optional },namespaces: new[] { "MvcApp4.Areas.Admin.Controllers" } //对应的命名空间的 controllers );}}
这样访问时就可以区分 , 不同目录的 controller
转载于:https://www.cnblogs.com/ldyblogs/p/controller.html
MVC4 中使用 Area 和 注意的地方相关推荐
- Asp.net MVC 4新项目中创建area的后续操作
Asp.net MVC 4新项目中创建area后,往往HomeController与area的HomeController路由发生混淆,需要手工设置一些地方避免mvc无法识别默认路由的状况. 无废话具 ...
- 【转】Web API项目中使用Area对业务进行分类管理
在之前开发的很多Web API项目中,为了方便以及快速开发,往往把整个Web API的控制器放在基目录的Controllers目录中,但随着业务越来越复杂,这样Controllers目录中的文件就增加 ...
- Autofac3 在MVC4中的运用原理
这是一种新的开发模式,注入开发模式,或者叫它IOC模式,说起IOC你可以这样去理解它,它为你的某个实现流出一个注入点,你生产的对象,可以根据你之前的配置进行组合. IOC全称是Inversion o ...
- 为什么matlab生成的exe文件只能在matlab中打开,在电脑的其他地方打不开?
为什么matlab生成的exe文件只能在matlab中打开,在电脑的其他地方打不开? 2014-11-09 20:20147****3349 | 浏览 448 次 操作系统 在同一个电脑里,在mat ...
- mvc4 html.dropdownlist,ASP.NET MVC4中使用Html.DropDownListFor的方法示例
本文实例讲述了ASP.NET MVC4中使用Html.DropDownListFor的方法.分享给大家供大家参考,具体如下: 一.控制器部分: public ActionResult PageDeta ...
- mvc html.dropdownlist,ASP.NET MVC4中使用Html.DropDownListFor的方法示例
本文实例讲述了ASP.NET MVC4中使用Html.DropDownListFor的方法.分享给大家供大家参考,具体如下: 一.控制器部分: public ActionResult PageDeta ...
- MVC4中基于bootstrap和HTML5的图片上传Jquery自定义控件
场景:mvc4中上传图片,批量上传,上传前浏览,操作.图片进度条. 解决:自定义jquery控件 没有解决:非图片上传时,会有浏览样式的问题; 解决方案; 1.样式 – bootstrap 的css和 ...
- 使用asp.net MVC4中的Bundle遇到的问题及解决办法
背景 之前有过使用MVC3的经验,也建过MVC4的基本样例看过,知道有bundle这么一个方法. 近日想建个网站使用MVC4,但是我觉得在基本样例上改不好,有太多无用的东西,所以就建了一个空白的MVC ...
- 在ASP.NET中值得注意的两个地方
在ASP.NET中ASPX页面的Page_Load事件有两个让人奇怪的地方,你应该记住它们: a.有时Page_Load事件在你的ASP.NET页面里会发生多次.这种情况发生的一个可能的原因是你把AS ...
- ASP.NET MVC4中调用WEB API的四个方法
当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各种客户端去使用服务已经是十分普遍的做法.就.NET而言,目前提供了Remoting,WebService和WCF服务,这都能开发出功能十分强 ...
最新文章
- 威胁生存!科学家警告灾难性“气候临界点”已逼近
- 乒乓球比赛赛程_国乒今年最后一站比赛延期!赛程缩短比赛地温暖,教练组考察队员...
- 普通卷积armv7-neon指令集实现—QNNPACK
- CodeForces 1131G. Most Dangerous Shark
- 将SSM架构中原来关于springSecurity3.x版本的写法配迁移到SpringBoot2.0框架中出现的问题解决记...
- Checksum 校验和
- Fixjs实践——标签、按钮控件
- Python密码强度判断
- 神经网络学习小记录53——TF2搭建孪生神经网络(Siamese network)比较图片相似性
- 3dmax:3dmax三维VR渲染设置(【DMC采样器】、【Vray默认置换】、【Vray系统】、【Vray日志】、杂项选项、灯光属性)之详细攻略
- php汉字utf8编码转换,PHP UTF8编码内的繁简转换类
- 【定时自动清理磁盘空间】
- 家庭收支记账软件项目【Golang-面向对象】
- 均匀分布的期望和方差的推导_概率论中均匀分布的数学期望和方差该怎么求啊?...
- 化繁为简,远光天擎助你一键云部署
- 溢出英语计算机,查看溢出(简述计算机溢出原理)
- 不情愿的守门人:关于全栈开发者的迷思
- 关于耳机与电脑连接断断续续问题的解决办法
- TOOL 一个裴蜀定理解析器
- 机器人砂型铸造_启东精密砂型铸造
热门文章
- LNMP详解(十六)——Nginx日志切割
- Redis详解(六)——Redis主从同步原理与配置
- ubuntu18.04 下安装搜狗输入法
- WPA3 标准被曝严重漏洞,WiFi 密码可遭窃取?
- [后端人员耍前端系列]AngularJs篇:使用AngularJs打造一个简易权限系统
- 多目标决策---多目标线性规划的解法
- Python标准库:内置函数ascii(object)
- 《树莓派开发实战(第2版)》——1.2 封装树莓派
- [傅里叶变换及其应用学习笔记] 二十二. 快速傅里叶变换
- RoundedUITableView