ASP.NET MVC 路由(五)
ASP.NET MVC 路由(五)
前言
前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述、思维导图没法让您看到路由的实际运用,特此篇幅来说明一下简单的示例。
路由的命名空间的定义
对于路由当中url规则、默认值、url参数约束这些的定义网上都有,本篇讲一下路由中命名空间的定义。
大家都知道路由的作用,让请求匹配到合理的控制器名称,并且交由控制器工厂来生成控制器来执行请求。然而在项目中难免会命名出相同名称的控制器,我们来模拟一下会发现什么情况。
环境配置
在MVC项目中Controllers文件上右击->添加->控制器,命名为HomeController,并且选择空模板。然后就不用管这个控制器了,什么都不要做了,在此类型所在的命名空间之外添加以下代码:
namespace AAAAA
{
public class HomeController : Controller
{
public ActionResult Index()
{
this.ViewBag.Name = this.GetType().FullName;
return View();
}
}
}
namespace BBBBB
{
public class HomeController : Controller
{
public ActionResult Index()
{
this.ViewBag.Name = this.GetType().FullName;
return View();
}
}
}
这个时候就是模拟的项目中由于时间的推移引用越来越多的程序集以及各种项目,所可能带来的重复命名,此时Global.asax文件中的默认路由定义:
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
我们也不用管,直接开始调试,则会看到以下这样的错误,如图:

这种情况给谁都不愿意发生,如果我们此时只需要AAAAA命名空间下的Home控制器怎么办?好办,用路由来配置:
routes.MapRoute(
"",
"{controller}/{action}",
new { controller = "Home", action = "Index" },
null,
new string[] { "AAAAA" }
);
只需要在MapRoute方法中将所需的命名空间定义为数组传入即可,此时我们右键AAAAA命名空间下的HomeController类型中的Index()方法,点击添加视图->添加,完成后在项目的Views文件夹下的Home文件夹下有个Index.cshtml文件就是添加的视图文件了,打开并且添加如下代码:
<h2>@ViewBag.Name</h2>
此时我们再执行MVC项目后,如图:

此时有的朋友可能会问,如果想让系统现在AAAAA命名空间下搜寻如果没有则在BBBBB下搜寻控制器,然后让路由这样定义:
routes.MapRoute(
"",
"{controller}/{action}",
new { controller = "Home", action = "Index" },
null,
new string[] { "AAAAA","BBBBB" }
);
告诉朋友们这样是不行的,如果AAAAA下没有Home控制器还好,如果有系统还是会继续搜寻BBBBB命名空间下的所有类型,关于这里的具体实现将在后面的默认控制器工厂篇幅中讲到。
如果想只在指定的命名空间下搜索的必须是这样定义:
Route route= routes.MapRoute(
"",
"{controller}/{action}",
new { controller = "Home", action = "Index" },
null,
new string[] { "AAAAA" }
);
route.DataTokens["UseNamespaceFallback"] = false;
这里的MapRoute()方法会返回一个Route对象,前面我们也说过Route对象的,只不过在注册路由的时候我们完全没有必要获取Route对象的引用,在这里我们需要获取到它,并且要把DataTokens属性集中的UseNamespaceFallback键所对应的值设置为false。这个值将会被传递到控制器工厂中,后续篇幅会讲到。
这样的结果是如果没有搜索到指定的控制器系统也会停止搜索。
作者:金源
出处:http://www.cnblogs.com/jin-yuan/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面
ASP.NET MVC 路由(五)的更多相关文章
- ASP.NET MVC路由(5)
ASP.NET MVC路由(五) 前言 前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述.思维导图没法让您看到路由的实 ...
- (转)ASP.NET MVC 第五个预览版和表单提交场景
转自:http://ourlife.blog.51cto.com/708821/296171 上个星期四,ASP.NET MVC开发团队发布了ASP.NET MVC框架的“第五个预览版”.你可以在这里 ...
- ASP.NET MVC 视图(五)
ASP.NET MVC 视图(五) 前言 上篇讲解了视图中的分段概念.和分部视图的使用,本篇将会对Razor的基础语法简洁的说明一下,前面的很多篇幅中都有涉及到视图的调用,其中用了很多视图辅助器,也就 ...
- ASP.NET MVC 路由(一)
ASP.NET MVC路由(一) 前言 从这一章开始,我们即将进入MVC的世界,在学习MVC的过程中在网上搜索了一下,资料还是蛮多的,只不过对于我这样的初学者来看还是有点难度,自己就想看到有一篇引导性 ...
- ASP.NET MVC 路由(二)
ASP.NET MVC路由(二) 前言 在上一篇中,提及了Route.RouteCollection对象的一些信息,以及它们的结构所对应的关系.按照处理流程走下来还有遗留的疑问没有解决这个篇幅就来讲 ...
- ASP.NET MVC 路由(三)
ASP.NET MVC路由(三) 前言 通过前两篇的学习会对路由系统会有一个初步的了解,并且对路由系统中的Url规则有个简单的了解,在大家的脑海中也有个印象了,那么路由系统在ASP.NETMVC中所处 ...
- ASP.NET MVC 路由(四)
ASP.NET MVC路由(四) 前言 在前面的篇幅中我们讲解路由系统在MVC中的运行过程以及粗略的原理,想必看过前面篇幅的朋友应该对路由有个概念性的了解了,本篇来讲解区域,在读完本篇后不会肯定的让你 ...
- ASP.NET MVC 过滤器(五)
ASP.NET MVC 过滤器(五) 前言 上篇对了行为过滤器的使用做了讲解,如果在控制器行为的执行中遇到了异常怎么办呢?没关系,还好框架给我们提供了异常过滤器,在本篇中将会对异常过滤器的使用做一个大 ...
- Asp.Net MVC 路由 - Asp.Net 编程 - 张子阳
http://cache.baiducontent.com/c?m=9d78d513d98316fa03acd2294d01d6165909c7256b96c4523f8a9c12d522195646 ...
随机推荐
- SQL SERVER 得到汉字首字母函数四版全集 --【叶子】
--创建取汉字首字母函数(第三版) create function [dbo].[f_getpy_V3] ( ) ) ) as begin ),) ,@len = len(@col),@sql = ' ...
- jQuery中事件绑定到bind、live、delegate、on方法的探究
1. 给页面上的某个元素绑定事件,最初采用下面的方式实现: $(‘selector’).click(function(){ //code }); 缺点: 不能同时绑定多个事件,不能绑定动态的元素. 后 ...
- 微信开发笔记:获取用户openid,以及用户头像昵称等信息
微信开发的时候有一个很便利的途径来进行一个用户的一步注册登录,就是使用用户的微信信息来直接进行登陆,可以省去很多不必要的麻烦.那具体这些信息是如何来获取的呢? 首先呢,我们需要对微信进行一个授权,让微 ...
- EXT5 时间框控制(开始时间不能大于结束时间)
1.网上看的大部分代码都是利用vtype : 'dateRange' EXT的这个属性,但是可能由于环境问题还是怎么样,我就是实现不了想要的效果. 然后研究了一下,在时间框的listeners 监听 ...
- MVC Html.BeginForm 与 Ajax.BeginForm 使用总结
最近采用一边工作一边学习的方式使用MVC5+EF6做一个Demo项目, 期间遇到不少问题, 一直处于研究状态, 没能来得及记录. 今天项目进度告一段落, 得以有空记录学习中遇到的一些问题. 由于MVC ...
- 51nod 1712 区间求和
题意 给你一个长度为 \(n\) 的序列,定义这个序列的权值为 $ \sum_{1 \leq i<j \leq n} a_j - a_i $. 现在给你一个长度为 \(n\) 的序列,当$ a_ ...
- Python调用HTTP接口并传递cookie
#get接口调用 import urllib import urllib2 get_url = "http://10.10.3.63/test?id=123&name=nba&quo ...
- 深入探索RB-tree数据结构
引子 部门在各个团队推广软件通用技能矩阵工具,希望通过度量找到能力薄弱点,引导团队进行改进.从我们团队的数据上看,团队在数据结构和算法上的短板明显,需要加强,这也是写这篇文章的背后的初衷. 数据结构和 ...
- mvn使用笔记
mvn命令格式: You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:< ...
- 【Telerik】实现列表单元格中添加复选框,进行状态(是、否)判断
前台界面: 需求:实现对每条细则是否必备进行判断,必备就勾选,否则不勾选. 首先:要保证列表GridView是可编辑的(IsReadOnly=false) 表格代码 其次:单元格的数据绑定要保证是双向 ...