目录索引:《ASP.NET MVC 5 高级编程》学习笔记

本篇内容
  1. Global.asax文件
  2. RouteConfig.cs文件
  3. 视图命名和寻址的规则

  前面创建了一个简单的ASP.NET MVC程序,虽然整个项目直接可以部署运行,一切都是按照约定好的执行。
  但是系统里面的一些细节还是需要我们了解的,这有助于我们对整个ASP.NET MVC程序如何工作进行系统性的理解。

  当然,在这里我们只简单介绍一下其执行过程,详细的生命周期等后面再逐步学习。

  除了上面介绍的Controller控制器、View视图等,我们还需要关注Global.asax、RouteConfig.cs以及视图命名及寻址的规则。
  (当然,在这里你只需要有个大概的认识就行了,东西不是一次性学会并掌握的。)

一、Global.asax文件

  默认创建的global.asax文件代码如下所示:

 public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}

  在ASP.NET MVC程序中,Global.asax主要是系统启动时做一些全局性的初始化操作。

  从上面的代码可以看出,它调用App_Start文件夹中的相关类来完成的这些工作。
  例如用RouteConfig.RegisterRoutes()来完成路由的注册,调用FilterConfig.ResiterGlobalFilters()来完成全局过滤器的注册等。

二、RouteConfig.cs文件

  默认创建的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 }
);
}
}

  这里RegisterRoutes()方法的作用就是定义路由,即定义客户端通过URL访问ASP.NET MVC程序的规则。

  可以注意到有一段代码“{controller}/{action}/{id}”,其实就是定义的URL规则。

  例如,使用“http://localhost:1996/Home/Index/778078163”访问系统,系统会把Home作为控制器的名字,从而自动对应到“/Controllers”目录中找到名为“HomeController”的控制器,然后把“Index”作为上面找到的控制器中的“Index()”操作方法,最后将“778078163”作为“Index()”方法的参数传入,得到相应的结果。

  另外,“http://localhost:1996/Home/Index”和“http://localhost:1996/Home”都能达到同样的效果,主要是defaults这行代码设置的默认值在起作用。

  关于路由规则,后面我们会单独一篇内容专门学习。

三、视图命名和寻址的规则

  在控制器中,使用View()方法调用视图,返回和动作方法同名的视图,但是却没有显式提供视图的位置。
  其实这这里依赖的就是视图的寻址规则,即会按照规则从规定的路径去寻找这个命名的视图。

  在ASP.NET MVC中,有一条寻址规则,就是会从Views文件夹下和控制器名同名的文件夹中寻找(如/Views/Home)。

  因此,一般创建视图也会按照这样的寻址规则,否则将出现找不到视图的错误。
  例如在这里,我讲程序默认的/Views/Home/Index.cshtml视图删掉,这样,当我访问Home/Index视图的的时候,就会出现如图这样的错误:
  我们也能从此发现,它默认是从哪找的这个页面从而显示出来的。

  

  对于一般的ASP.NET MVC程序来说,就是如图所示的一个处理过程:

  

  1. 最开始是应用程序启动、注册路由访问的规则;
  2. 当请求到来时,寻找路由表,找到负责处理的控制器和操作方法,将附带的参数等交给该方法进行处理;
  3. 方法处理完毕,根据寻址规则找到视图,由视图负责呈现指定的页面。

05 入门 - 浅谈 ASP.NET MVC程序的工作原理的更多相关文章

  1. 【ASP.NET MVC系列】浅谈ASP.NET MVC八大类扩展(上篇)

    lASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操 ...

  2. 【ASP.NET MVC系列】浅谈ASP.NET MVC运行过程

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  3. 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  4. 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图与控制器传递数据

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  5. 【ASP.NET MVC系列】浅谈ASP.NET MVC 控制器

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  6. 【ASP.NET MVC系列】浅谈ASP.NET MVC 路由

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  7. 【ASP.NET MVC系列】浅谈ASP.NET MVC资源过滤和授权

    最近比较忙,博客很久没更新了,很多博友问何时更新博文,因此,今天就花了点时间,写了本篇文章,但愿大家喜欢. 本篇文章不适合初学者,需要对ASP.NET MVC具有一定基础. 本篇文章主要从ASP.NE ...

  8. 浅谈Asp.net Mvc之Action如何传多个参数的方法

    最近,工作上有一个需要:用户查询日志文件信息,查看某一个具体日志信息,可能同时查看该日志所在日期的其他日志信息列表. 为完成此功能,我打算在URL中传入了两个参数,一个记录此日志时间,另外一个记录日志 ...

  9. 【ASP.NET MVC系列】浅谈ASP.NET 程序发布过程

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

随机推荐

  1. vue防止按钮在短时间内被多次点击的方法

    vue组件 (function(){ let openDelay=false; Vue.directive('intervalclick', function(el,binding){ el.oncl ...

  2. SSRS报表服务随笔(rdl报表服务)-报表参数

    上一篇我们说了创建一个简单的显示报表,但在实际工作中,我们有很多要带条件的报表 现在先认识一下报表数据,首次打开SSDT,报表数据在窗口的左侧,要是找不到了,没关系,在工具栏-视图-最下面的报表数据 ...

  3. 改造断路器集群监控Hystrix Turbine实现自动注册消费者、实时监控多个服务

    在上一篇文章中,我们搭建了Hystrix Dashoard,对指定接口进行监控.但是只能对一个接口进行监听,功能比较局限: Turbine:汇总系统内多个服务的数据并显示到 Hystrix Dashb ...

  4. 《Jave并发编程的艺术》学习笔记(1-2章)

    Jave并发的艺术 并发编程的挑战 上下文切换 CPU通过时间片分配算法来循环执行任务,当前时间片执行完之后会切换到下一个任务.但是,切换会保存上一个任务的状态,一遍下次切换回这个任务时,可以再次加载 ...

  5. 【译】在C#中实现单例模式

    目录 介绍 第一个版本 --不是线程安全的 第二个版本 -- 简单的线程安全 第三个版本 - 使用双重检查锁定尝试线程安全 第四个版本 - 不太懒,不使用锁且线程安全 第五版 - 完全懒惰的实例化 第 ...

  6. Adreno OpenCL坑——bool转int

    在项目代码中为了避免条件分支,需要把bool变成int的形式,然后通过向量运算的形式和单个单个的形式,其结果却是不同,向量的方式为(-1, 0),而单个的转换则为(1, 0) 有如下kernel代码: ...

  7. 持续集成之应用k8s自动部署

    持续集成之应用k8s自动部署 Intro 上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如 ...

  8. 删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录

    delete from Resource where Title in (select Title from Resource group by Title having count(Title) & ...

  9. 原生的 django 分页

    原始的 django 分页 # 基本 写法 class Paginator(object): def __init__(self, object_list, per_page, orphans=0, ...

  10. 快速构建SPA框架SalutJS--项目工程目录 一

    起因 刚进公司那会儿,接的是一个微信APP应用,SPA是前人搭起来的,用到的技术主要是backbone和zepto.后来那人走了,就卤煮一个人把项目接了下来.项目越是到后面,越发觉了诸多弊端,不停的增 ...