05 入门 - 浅谈 ASP.NET MVC程序的工作原理

简介: 目录索引:《ASP.NET MVC 5 高级编程》学习笔记   本篇内容   1. Global.asax文件   2. RouteConfig.cs文件   3. 视图命名和寻址的规则   前面创建了一个简单的ASP.NET MVC程序,虽然整个项目直接可以部署运行,一切都是按照约定好的执行。

 

目录索引:《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文件代码如下所示:

 1 public class MvcApplication : System.Web.HttpApplication
 2 {
 3     protected void Application_Start()
 4     {
 5         AreaRegistration.RegisterAllAreas();
 6         FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
 7         RouteConfig.RegisterRoutes(RouteTable.Routes);
 8         BundleConfig.RegisterBundles(BundleTable.Bundles);
 9     }
10 }

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


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


二、RouteConfig.cs文件

  默认创建的RouteConfig.cs文件代码如下所示:

 1 public class RouteConfig
 2 {
 3     public static void RegisterRoutes(RouteCollection routes)
 4     {
 5         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 6 
 7         routes.MapRoute(
 8             name: "Default",
 9             url: "{controller}/{action}/{id}",
10             defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
11         );
12     }
13 }

  这里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. 方法处理完毕,根据寻址规则找到视图,由视图负责呈现指定的页面。

 

【来自:张董'Blogs:http://www.cnblogs.com/LonelyShadow,转载请注明出处。】

亲们。码字不容易,觉得不错的话记得点赞哦。。

目录
相关文章
|
2月前
|
机器学习/深度学习 算法 网络架构
【CVPR2017】AOD-Net:端到端的除雾网络(原理&实操)
【CVPR2017】AOD-Net:端到端的除雾网络(原理&实操)
401 0
【CVPR2017】AOD-Net:端到端的除雾网络(原理&实操)
|
4月前
|
前端开发
MVVM和MVC的原理以及它们的区别
MVVM和MVC的原理以及它们的区别
|
4月前
|
前端开发 安全 Java
SpringMVC基础篇:第一个MVC程序和细节分析
SpringMVC基础篇:第一个MVC程序和细节分析
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
41 0
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0
|
1月前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
存储 设计模式 前端开发
请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
【2月更文挑战第26天】【2月更文挑战第89篇】请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
|
1月前
|
前端开发 Java 数据管理
Spring MVC 工作原理解析
Spring MVC 工作原理解析
22 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
95 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0