ASP.NET MVC3 系列教程 – Web Pages 1.0
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开发革命正式诞生 *@
ASP.NET MVC3 系列教程 – Web Pages 1.0的更多相关文章
- ASP.NET MVC3 系列教程 - 目录
ASP.NET MVC3 系列教程 - 目录 I:ASP.NET MVC3 新增的功能 ASP.NET MVC3 系列教程 - Razor视图引擎基础语法ASP.NET MVC3 系列教程 - V ...
- ASP.NET MVC3 系列教程 - 部署你的WEB应用到IIS 6.0
I:ASP.NET MVC3 部署的前期工作 1.确认部署的服务器操作系统环境 首先我们确认服务器的操作系统版本 可以从系统命令行工具里输入: systeminfo 获取相关操作系统信息例如 然后再确 ...
- ASP.NET MVC3 系列教程 – 新的Layout布局系统
原文地址:http://www.cnblogs.com/highend/archive/2011/04/18/asp_net_mvc3_layout.html I:回忆MVC2当中MasterPage ...
- ASP.NET MVC3 系列教程 - Razor视图引擎基础语法
http://www.cnblogs.com/highend/archive/2011/04/09/aspnet_mvc3_razor_engine.html 4. 关于所有带"_" ...
- ASP.NET MVC3 系列教程 - 模型
I:基础绑定的实现 1.在前面的两篇基础文章(路由 及 控制器&视图)当中,还没对QueryString的绑定进行介绍,因为我觉得它更适合放在这一章节中去介绍.我们在用WebForm去开发的时 ...
- ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web API
ASP.NET 5.0 的主要目标之一是统一MVC 和 Web API 框架应用. 接下来几篇文章中您会了解以下内容: ASP.NET MVC 6 中创建简单的web API. 如何从空的项目模板中启 ...
- ASP.NET Identity系列教程(目录)
$(document).ready(function(){ $("#hide").click(function(){ $(".en").hide(); }); ...
- 【ASP.NET Identity系列教程(一)】ASP.NET Identity入门
注:本文是[ASP.NET Identity系列教程]的第一篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...
- 【ASP.NET Identity系列教程(二)】运用ASP.NET Identity
注:本文是[ASP.NET Identity系列教程]的第二篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...
随机推荐
- Hibernate逍遥游记-第6章 通过Hibernate操纵对象(select-before-update)
1. 2. 3. 4. 5. 6. 7.
- PowerDesigner的样式设置
原文:PowerDesigner的样式设置 PD提供了强大的配置功能,可以对生成的数据库对象命名.数据模型的展现进行设置.这里首先讲下样式的设置. 颜色和字体设置 1.单独设置某个对象的颜色和字体 1 ...
- PCL—低层次视觉—点云分割(基于形态学)
1.航空测量与点云的形态学 航空测量是对地形地貌进行测量的一种高效手段.生成地形三维形貌一直是地球学,测量学的研究重点.但对于城市,森林,等独特地形来说,航空测量会受到影响.因为土地表面的树,地面上的 ...
- hadoop-0.23.9安装以及第一个mapreduce测试程序
hadoop是一个能够对大量数据进行分布式处理的软件框架.它实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有着高容错性的特点,并且设计 ...
- Main()方法
C#是从方法Main()开始执行的.这个方法必须是类或结构的静态方法,并且其返回类型必须是int或void .虽然显式指定p山屺修饰符是很常见的,因为按照定义,必须在程序外部调用该方法,但我们给该入口 ...
- JVM学习笔记(一)------基本结构
从Java平台的逻辑结构上来看,我们可以从下图来了解JVM: 从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别 对于JVM自身的物理结构,我们可以从下图鸟瞰一下: 对于J ...
- bat拷贝文件
最近在部署服务器的时候,需要用到把一个站点文件拷贝到其他站点.一个一个手动copy太累人了,写了个简单的批处理文件,基本能达到目的,具体怎么做呢: 1.把需要拷贝到各个站点的文件,单独放到一个目录下. ...
- Android开发之XML的创建和解析
参考:http://blog.csdn.net/pi9nc/article/details/9320413 XML文件的解析,代码: public void click(View v) { Input ...
- git push --no-thin
有时候我们执行 git push 将一个 new branch 推送到远程仓库的时候,会被远程仓库阻止. 可能是我们没有相应的权限吧.然而,我在 git push 的时候加上 --no-thin 参数 ...
- rapidxml使用
以前都是用tinyxml,这次开发中解析xml配置文件像尝试一下rapidxml,据说效率很高... RapidXml Manual: http://rapidxml.sourceforge.net/ ...