http://www.cnblogs.com/highend/archive/2011/04/14/aspnet_mvc3_web_pages.html

I:Web Pages 1.0中以“_”开头的特别文件(文件命名时不区分大小写)

综上所述得知MVC3的APP初始化顺序为:  
(不排除本人未能发现的其他文件类型,但目前据我所知道应用最广的就这三个)

在Web Pages 1.0下,除非你显式以”_”开头命名View.否则你在请求”_”开头的页面时会遇到以下无法服务的页面提示
(这图在Razor语法基础时就帖过了.这里帖出来是让大家温故而知新)

关于*.cshtml生成的类名格式 绝大部分页生成的程序集格式  
页面编译都是以单独页面编译为单个带随机字符串的程序集,当然也可以采用预编译方式将n个页编译为1个程序集

II:关于多目录下以”_”开头的特殊文件的执行顺序

_appstart.cshtml仅能存在于根目录(“~/”), 如果你在子目录下放置_appstart.cshtml文件的话.那么该文件就不会被App初始化时执行
当访问~/somepage.cshtml时. 会先执行~/_pageStart.cshtml 然后在执行 ~/somepage.cshtml 当在复杂的子目录环境下时:

~/_pageStart.cshtml

~/sub/_pageStart.cshtml

~/sub/somepage.cshtml

III:Web Pages 1.0脱离WebForms的启动原理

首先Web Pages利用特性往本身程序集上与ASP.NET挂钩 // SourceFile: AssemblyInfo.cs(System.Web.WebPages.dll) //AttributeClass: System.Web. PreApplicationStartMethodAttribute //特性介绍:为ASP.NET 其他Provide提供扩展 //参数1: ASP.NET Provide的类型 //参数2:运行的方法名 //Source: [assembly: PreApplicationStartMethod(typeof(System.Web.WebPages.PreApplicationStartCode), "Start")] //Line: 15 然后我们在这里可以看到Web Pages的ASP.NET Provide是.Web.WebPages.PreApplicationStartCode 启动方法是Start

public static void Start() {

    // Even though ASP.NET will only call each PreAppStart once, we sometimes internally call one 

    // another PreAppStart to ensure that things get initialized in the right order. ASP.NET does 

    // order so we have to guard against multiple calls.

    // All Start calls are made on same thread, so no lock needed here.

 

    if (_startWasCalled) {

        return;

    }

    _startWasCalled = true; //设置Start方法已被调用

 

    WebPageHttpHandler.RegisterExtension("cshtml");//注册扩展

    WebPageHttpHandler.RegisterExtension("vbhtml");//注册扩展

 

    // Turn off the string resource behavior which would not work in our simple base page

    PageParser.EnableLongStringsAsResources = false;//优化选项

 

    DynamicModuleUtility.RegisterModule(typeof(WebPageHttpModule));//重点在这里了.~~注册了一个WebPageHttpModule

 

    ScopeStorage.CurrentProvider = new AspNetRequestScopeStorageProvider();

    //ASP.NET Web Pages的RequestScopeStorageProvider

}

IV:附录:Global执行顺序

当WebApp开始运行时

Application_Start

Application_BeginRequest

Application_AuthenticateRequest

Session_Start

当WebApp终止运行时

Session_End

Application_End

当一个Request入站时

Application_BeginRequest

Application_AuthenticateRequest 过后到达*.cshtml

当在*.cshtml throw new Exception();时

Application_BeginRequest

Application_AuthenticateRequest

Application_Error(在throw处转至,不会执行*.cshtml的throw后的下文) 例: @{ Throw new Exception();//仅做示例 //下文不会被执行,而直接跳到Application_Error终止Response }

V:有经验的看官,或许已经知道了.可以在*.cshtml中做IoC(Unity 2.0有提供)来变Themes换布局等.

更深入点,你可以dynamic创建*.cshtml文件~~实现按需创建Web页~HOHO~~~

@* MVC3一个新的Web开发革命正式诞生 *@

声明: 本文版权归作者dotNetDR_和博客园共有,转载必须保留此段声明。

ASP.NET MVC3 系列教程 – Web Pages 1.0的更多相关文章

  1. ASP.NET MVC3 系列教程 - 目录

    ASP.NET MVC3 系列教程 - 目录   I:ASP.NET MVC3 新增的功能 ASP.NET MVC3 系列教程 - Razor视图引擎基础语法ASP.NET MVC3 系列教程 - V ...

  2. ASP.NET MVC3 系列教程 - 部署你的WEB应用到IIS 6.0

    I:ASP.NET MVC3 部署的前期工作 1.确认部署的服务器操作系统环境 首先我们确认服务器的操作系统版本 可以从系统命令行工具里输入: systeminfo 获取相关操作系统信息例如 然后再确 ...

  3. ASP.NET MVC3 系列教程 – 新的Layout布局系统

    原文地址:http://www.cnblogs.com/highend/archive/2011/04/18/asp_net_mvc3_layout.html I:回忆MVC2当中MasterPage ...

  4. ASP.NET MVC3 系列教程 - Razor视图引擎基础语法

    http://www.cnblogs.com/highend/archive/2011/04/09/aspnet_mvc3_razor_engine.html 4. 关于所有带"_" ...

  5. ASP.NET MVC3 系列教程 - 模型

    I:基础绑定的实现 1.在前面的两篇基础文章(路由 及 控制器&视图)当中,还没对QueryString的绑定进行介绍,因为我觉得它更适合放在这一章节中去介绍.我们在用WebForm去开发的时 ...

  6. ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web API

    ASP.NET 5.0 的主要目标之一是统一MVC 和 Web API 框架应用. 接下来几篇文章中您会了解以下内容: ASP.NET MVC 6 中创建简单的web API. 如何从空的项目模板中启 ...

  7. ASP.NET Identity系列教程(目录)

    $(document).ready(function(){ $("#hide").click(function(){ $(".en").hide(); }); ...

  8. 【ASP.NET Identity系列教程(一)】ASP.NET Identity入门

    注:本文是[ASP.NET Identity系列教程]的第一篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...

  9. 【ASP.NET Identity系列教程(二)】运用ASP.NET Identity

    注:本文是[ASP.NET Identity系列教程]的第二篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...

随机推荐

  1. [转]c#调用API截图

    转自http://blog.csdn.net/hailiannanhai/article/details/6281471 要想完成这个功能,首先要了解一下在C#中如何调用API(应用程序接口)函数.虽 ...

  2. java:打包

    包名命名规范: 1.包名全部小写 2.包名一般情况下是域名的倒过来写+个性命名,如:tinyphp.com,就写成com.tinyphp+.xxx 打包方法 package + 包名 package ...

  3. highcharts 结合phantomjs纯后台生成图片

    highcharts 结合phantomjs纯后台生成图片 highcharts 这个图表展示插件我想大家应该都知道,纯javascript编写,相比那些flash图表插件有很大的优势,至少浏览器不用 ...

  4. public View getView(int position, View convertView, final ViewGroup parent)三个参数的意思

    最近看到有人在问这三个参数的含义,其实帮助已经很详细的介绍了这三个参数,看来还是要好好学学英语了,不然连解释都看不懂. /**     * Get a View that displays the d ...

  5. 用代码编辑数据库T-SQL语句

    1.创建表 create table Car( Code varchar(50) primary key, Name varchar(50), Time date, Price float, Bran ...

  6. redis状态与性能监控

    Redis介绍 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表.哈希.集合和有序集合5种.支持在服务器端计算集合 ...

  7. 如何使用 Java 测试 IBM Systems Director 的 REST API

    转自: http://www.ibm.com/developerworks/cn/aix/library/au-aix-systemsdirector/section2.html 如何使用 Java ...

  8. bzoj3994

    智商太低了 详细题解在这里http://blog.csdn.net/zmoiynlp/article/details/45176129 ; ..max] of longint; g:..max] of ...

  9. LA 2218 (半平面交) Triathlon

    题意: 有n个选手,铁人三项有连续的三段,对于每段场地选手i分别以vi, ui 和 wi匀速通过. 对于每个选手,问能否通过调整每种赛道的长度使得他成为冠军(不能并列). 分析: 粗一看,这不像一道计 ...

  10. ffmpeg-2.3.3 configure for android

    #! /bin/shNDK=/usr/local/android-ndk-r10PREBUILT=${NDK}/toolchains/arm-linux-androideabi-4.9/prebuil ...