百科问答小站 logo
百科问答小站 font logo



asp.net mvc源代码结构是怎样的? 第1页

  

user avatar   Ivony 网友的相关建议: 
      

我倒是看过源码,不过框架结构是啥东西?

以MVC2为例(一直到MVC5大框架没变)。

主要是Routing模块 -> Controller -> ActionInvoker -> ViewEngine这样。

Routing已经整合在ASP.NET内部了,主要就是个双向路由,把URL变成RouteData以及把RouteData变回成URL。

Controller工厂部分读取RouteData查找Controller,Controller类型数据会被缓存下来,查找到Controller后创建ControllerDescriptor。

从ControllerDescriptor创建Controller实例,然后根据RouteData找到ActionDescriptor,然后交由ActionInvoker执行。

ActionInvoker先调用ModelBinder对参数进行数据绑定,ModelBinder通过IValueProvider获取值,再组织成强类型对象,并绑定到参数上。

所有参数值都搞定后就是直接执行Action方法,得到一个结果ActionResult,执行ActionResult输出HTML。这个中间会自动套上ActionFilter执行。当然,AuthorizationFilter和ExceptionFilter也是在这里一并处理的。

如果ActionResult是ViewResult,则在执行的时候会调用ViewEngine来创建IView对象,然后把ViewContext传进去渲染HTML。

一般用的是Razor视图,Razor视图会把cshtml文件即时编译成一个WebPage的派生类型,然后RazorView会将ViewContext丢给这个类型渲染HTML。

基本就是这样,应该没什么遗漏了。




  

相关话题

  为什么说 Gmail 达到了前端技术的最尖端? 
  学习编程照着别人的代码敲进去有效率吗? 
  C#为什么非要把函数叫方法? 
  作为程序员,是什么让你坚持不懈地学习?难道不累吗? 
  单片机编程最早是汇编,然后从汇编转为c语言,那么,c++会不会替代c语言来进行单片机编程 ? 
  asp.net mvc 4 模型层为什么可以通过简单的 {get;set}就可以对数据进行设置和取得 这其中的实现原理是什么? 
  请问这个VS插件的源码为什么我在VS2010 2013中都打不开啊?? 
  C#如何实现类似Nullable<T>的效果? 
  如今 Windows 软件开发究竟该用什么库,C#、Qt,还是其他? 
  C# 秒杀物品,程序如何控制并发? 

前一个讨论
如果征收100%遗产税,这个世界将会变成什么样?
下一个讨论
公开宣称自己使用盗版软件,在中国大陆会有刑事罪责吗?





© 2024-06-26 - tinynew.org. All Rights Reserved.
© 2024-06-26 - tinynew.org. 保留所有权利