ASP.NET MV“.NET研究”C3 基础教程 – Web Pages 1.0

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

  “_appstart.cshtml” & “_pagestart.cshtml” & “_viewstart.cshtml”

  _appstart.cshtml - 应用程序启动时在Global. Application_Start方法后执行。
  功能:用于进行App的初始化时,需要进行处理的内容,例:向数据库记录系统初始化的一些信息。
  功能与Global.Application_Start类似,差别在于:Global的Start先执行,然后在到该_appStart,值得注意的是在_appStart上下文中可以使用.NET4的dynamic新特性~~在声明中,作为属性、字段、索引器、参数、返回值或类型约束的类型。


@{
this.App.StartMessage = "App顺利已启动了.恭喜!哈";
var error = this.App.Error as string;
if (error == null)
{
this.App.Error = "使用dynamic新特性之前.请先赋值~";
error = this.App.Error;
@*
在这里很遗憾地告诉大家.dynamic不支持智能感知
因为编译无法100%准确得知程序的执行顺序.
所以无法智能感知!
*@
}
// 在这里可以引用 App.Error动态字段了.
}


@{
@* ~/Views/_ViewStart.cshtml *@
Response.Write(string.Format("<h1>{0}</h1>", App.StartMessage));
Layout = "~/Views/Shared/_Layout.cshtml";
}

  成员来自:

  at System.Web.WebPages.Razor.WebPageRazorHost

  at System.Web.WebPages.ApplicationStartPage

  _viewstart.cshtml - 单个View处理Request时执行。
  功能:或许你已经联想到了….Global的Page_Load(仅应用于View)……
  执行顺序位于_appstart.cshtml之后.毕竟所除层次不同。
  成员来自: 

  at System.Web.Mvc.RazorViewEngine
  综上所述得知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
上海网站建设上海徐汇企业网站设计与制作/a>n style="color: #008000;">//特性介绍:为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 = 上海闵行企业网站设计与制作yle="color: #0000ff;">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开发革命正式诞生 *@

时间: 2024-10-17 09:58:09

ASP.NET MV“.NET研究”C3 基础教程 – Web Pages 1.0的相关文章

一起谈.NET技术,ASP.NET MVC3 基础教程 – Web Pages 1.0

I:Web Pages 1.0中以"_"开头的特别文件(文件命名时不区分大小写) "_appstart.cshtml" & "_pagestart.cshtml" & "_viewstart.cshtml" _appstart.cshtml - 应用程序启动时在Global. Application_Start方法后执行. 功能:用于进行App的初始化时,需要进行处理的内容,例:向数据库记录系统初始化的一些信息

ASP.NET MVC3 基础教“.NET技术”程 – Web Pages 1.0

I:Web Pages 1.0中以"_"开头的特别文件(文件命名时不区分大小写) "_appstart.cshtml" & "_pagestart.cshtml" & "_viewstart.cshtml" _appstart.cshtml - 应用程序启动时在Global. Application_Start方法后执行. 功能:用于进行App的初始化时,需要进行处理的内容,例:向数据库记录系统初始化的一些信息

asp.net连接sql数据库实例基础教程

asp.net|基础教程|教程|sql数据库 以下代码演示了如何使用asp.net连接sql server2000数据库并操作的代码实例, 和asp.net初学者分享一下. asp.net基础教程,连接SQL Server2000数据库实例代码分析: 以下为代码内容:<%@ Import Namespace="System.Data" %> <%@ Import NameSpace="System.Data.SqlClient" %> <

Asp基础教程(上)

基础教程|基础教程 一.Asp基本知识 1.Asp是Active Server Pages的简称,是解释型的脚本语言环境:2.Asp的运行需要Windows操作系统,9x下需要安装PWS:而NT/2000/XP则需要安装Internet Information Server(简称IIS):3.Asp和JSP的脚本标签是"<%%>",PHP的则可以设定为多种:4.Asp的注释符号是"'":5.使用附加组件,可以扩展Asp的功能. 例子: HelloWorl

Asp基础教程(下)

基础教程|基础教程 四.Asp组件的开发与使用: 1. 组件的特点? l 优点:n 调用方便,节省代码n 安全性高n 支持事务处理,多组件联合n 运行速度快n 升级.修改组件不需修改页面,因此扩展性好l 缺点:n 开发及调试困难 2. 如何使用VB开发? ⑴.打开VB>>New Project>>ActiveX DLL ⑵.修改项目名称为course ⑶.修改类模块的名字为conn_db ⑷.Project>> References,引用COM+ Service Typ

ASP基础教程之学习ASP中子程序的应用

程序|基础教程 在ASP中,你可通过VBScript和其他方式调用自程序. 实例: 调用使用VBScript的子程序 如何从ASP调用以VBScript编写的子程序.  <html> <head><%sub vbproc(num1,num2)response.write(num1*num2)end sub%></head> <body><p>You can call a procedure like this:</p>&l

ASP基础教程之实例学习ASP Response 对象

response|对象|基础教程 ASP Response 对象用于从服务器向用户发送输出的结果. 实例 使用ASP写文本 本例演示如何使用ASP来写文本. <html><body><%response.write("Hello World!")%></body></html> 在ASP中使用HTML标签格式化文本 本例演示如何使用ASP将文本和HTML标签结合起来. <html><body><%

ASP基础教程:堵住ASP漏洞

无论你相不相信,通过 asp,可能可以很方便地入侵 web server.窃取服务器上的文件.捕获 web 数据库等系统的用户口令,甚至恶意删除服务器上的的文件,直至造成系统损坏,这些都决非耸人听闻,而且都确确实实发生过,本文将向你一一揭示这些 asp 存在的漏洞,并提出一些防范意见.     上一篇中给大家着重谈了"ADO 存取数据库时如何分页显示"的问题,有位朋友来信给我指出我在计算页面总数时忽略了 Recordset 对象的一个重要参数"PageCount",

CODEPAGE 列表与asp应用例子第1/2页_基础教程

指定的代码页特性无效. codepage属性:是指出网页的代码页 如果制作的网页脚本与WEB服务端的默认代码页不同,则必须指明代码页: 代码如下: codepage=936 简体中文GBK codepage=950 繁体中文BIG5 codepage=437 美国/加拿大英语 codepage=932 日文 codepage=949 韩文 codepage=866 俄文 codepage=65001 unicode UFT-8 页面编码的使用: 基于vbscript vbscript <%@LA