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. Intellij IDEA 新建一个EJB工程(三)

    之前都是用IDEA启动JBoss服务器,并在启动的同时将EJB项目部署上去.在构建 artifacts 时遇到很多问题,明明是EJB项目却不能用EJB导出,真是奇怪~~ 后来用Web Applicat ...

  2. QTP公开课视频-持续更新中。。。

    以下是视频的下载地址: http://pan.baidu.com/share/link?shareid=1760499709&uk=3711405498

  3. The type xxx cannot be resolved. It is indirectly referenced from required .class files

    项目A中引入一个jar包B,在项目A中调用项目B,出现如下错误提示:   大致意思是:这上面所需的包是间接引用的,即A项目调用B项目,B项目又引用了另外一个包C,而这个包现在不在你的A项目的引用中. ...

  4. php整理(一):变量和字符串

    PHP中的变量: 1. 定义:$符号来定义变量 2. 说明: (1)PHP弱语言,定义变量的时候不用声明类型,但是并不代表PHP没有数据类型 (2)变量名是区分大小写的,只能是数字,字母或者下划线 ( ...

  5. EBS报表输出文件格式控制

    具体使用方法:1.添加用户参数p_conc_request_id2.在BeforeReport trigger中添加srw.user_exit('FND SRWINIT');          和Af ...

  6. 12 Useful “df” Commands to Check Disk Space in Linux

    On the internet you will find plenty of tools for checking disk space utilization in Linux. However, ...

  7. maven常用构建命令

    mvn -v 查看maven版本 compile   编译项目 install   将项目加入到本地仓库中 clean   删除target test    测试 package     打包

  8. 用Java Servlets代替CGI

    从网络的早期阶段开始,人们就希望他们的网络服务器不仅能够显示静态文档,通用网关接口(CGI) 扩展了服务器的能力,但其代价是增加了额外的处理进程.FastCGI则把外部CGI 处理进程同网络服务器更紧 ...

  9. [转] jQuery Infinite Ajax Scroll(ias) 分页插件介绍

    原文链接:http://justflyhigh.com/index.php/articlec/index/index.php?s=content&m=aticle&id=91 Infi ...

  10. Web Api 接口文档制作

    参考地址: http://blogs.msdn.com/b/yaohuang1/archive/2012/05/21/asp-net-web-api-generating-a-web-api-help ...