asp.net小知识
花了一个月课余的时间算是把asp.net的基本的东西都搞定了,感觉有点快了,还是回头好好在整理下基础知识。
一开始或许我们马上就接触到了.aspx的通用后缀的文件,于是我们很自然的就在这里面开始写代码,开始都不知道为什么要这么写,写的不亦乐乎,于是就开始入门了,新学的同学可以和我一起复习一下。
单文件模型
当我们在后面遇到MVC或者用webForm的<%=###%>模拟MVC效果的时候,我们是否有这样的疑问,就是我们在可以在前台调用后台代码的返回值什么的,于是有些人开始这么试验<% for(int i=0;i<100;i++){########}%>结果的确可以正常执行,于是我们知道了,<%%>很好很强大,但是好像还是没劲,这么写个返回值可以,但是写一段代码,后台还有个cs文件显摆着不用,这不是脱裤子放屁多此一举吗,于是我们追本溯源,找到了一种最原始的方式。我们只需要建立一个HTML页面,把后缀改成aspx就OK了。
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <title>单文件模式</title>
4 </head>
5 <body>
6 <form runat="server" action=""> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
7 <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
8 </form>
9 <script runat="server" language="C#">
10 protected void Button1_Click (object sender,EventArgs e)
11 {
12 Label1.Text="单文件模式";
13 }
14 </script>
15 </body>
16 </html>
结果我们在浏览器中运行,其中我们把html代码和C#代码混合在一个页面里面使用(<script runat="server" language="C#">),这么看上去感觉一一对应貌似很美观,但是只要代码量一上去,够人头痛,还不好维护,所以这里举这
么个例子只是告诉新学习的同学,有这么回事,但是实用性其实不高。
后台代码模型
这种就不多提了因为是大家都在用的模型,唯一值得提的就是那个被人忽视编译指令,由于浮躁好多人直接使用也没怎么注意过,我们就以原始生成的指令为基础解释下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="backstageFile.aspx.cs" Inherits="backstageFile" %>
CodeFile 后台代码
Inherits 后台代码中定义的类名
AutoEventWireup 指示页面的事件是否自动匹配
当然我们也可以看出aspx和html后缀的直接区别,就是aspx页面可以继承自后台,于是我们可以知道aspx最终编译成的还是
类。
总结:对比这两种模式
- ***.aspx单文件模型被.NET运行时编译成***_aspx类(继承自System.Web.UIPage类)。
- ***.aspx 后台代码模型最终也被.NET运行时编译成***_aspx类(继承自System.Web.UIPage类,***.aspx.cs文件用于定义Web控件的一些代码片段【这部分还是从***.aspx中提取的所有Web控件和事件】)。
应用程序文件夹
我们很熟悉各个语言类库和运行框架都定义了自己的保留字和关键字,那么对已一个类似asp.net的这个用于Web开发的框架来说,设置自己的某些特定的保留或者关键格式的类型是否很有必要,于是出现了应用程序文件夹这个概念,当然我们可以把它当做是保留(关键)文件夹,这些文件夹既然是保留类型的,就是说我们不可以随便重命名,否则到时候不是系统崩溃就是你崩溃,那么应用程序文件夹有哪些?
App_Browsers |
包含 ASP.NET 用于标识个别浏览器并确定其功能的浏览器定义 (.browser) 文件。有关更多信息,请参见 浏览器定义文件架构(browsers 元素) 和 如何:在 ASP.NET 网页中删除浏览器类型和浏览器功能。 |
App_Code |
包含您希望作为应用程序一部分进行编译的实用工具类和业务对象(例如 .cs、.vb 和 .jsl 文件)的源代码。在动态编译的应用程序中,当对应用程序发出首次请求时,ASP.NET 编译 App_Code 文件夹中的代码。然后在检测到任何更改时重新编译该文件夹中的项。 说明
可以在 App_Code 文件夹中放置任意文件类型以创建强类型对象。例如,将 Web 服务文件(.wsdl 和 .xsd 文件)放置在 App_Code 文件夹可以创建强类型的代理。
在应用程序中将自动引用 App_Code 文件夹中的代码。此外,App_Code 文件夹可以包含需要在运行时编译的文件的子目录。有关更多信息,请参见 ASP.NET 网站中的共享代码文件夹 和 compilation 的 codeSubDirectories 元素(ASP.NET 设置架构)。 |
App_Data |
包含应用程序数据文件,包括 MDF 文件、XML 文件和其他数据存储文件。ASP.NET 2.0 使用 App_Data 文件夹来存储应用程序的本地数据库,该数据库可用于维护成员资格和角色信息。有关更多信息,请参见 成员资格介绍 和 了解角色管理。 |
App_GlobalResources |
包含编译到具有全局范围的程序集中的资源(.resx 和 .resources 文件)。App_GlobalResources 文件夹中的资源是强类型的,可以通过编程方式进行访问。有关更多信息,请参见 ASP.NET 网页资源概述。 |
App_LocalResources |
包含与应用程序中的特定页、用户控件或母版页关联的资源(.resx 和 .resources 文件)。有关更多信息,请参见 ASP.NET 网页资源概述。 |
App_Themes |
包含用于定义 ASP.NET 网页和控件外观的文件集合(.skin 和 .css 文件以及图像文件和一般资源)。有关更多信息,请参见 ASP.NET 主题和外观。 |
App_WebReferences |
包含用于定义在应用程序中使用的 Web 引用的引用协定文件(.wsdl 文件)、架构(.xsd 文件)和发现文档文件(.disco 和 .discomap 文件)。有关生成 XML Web Services 的代码的更多信息,请参见 Web Services Description Language Tool (Wsdl.exe)。 |
Bin |
包含您要在应用程序中引用的控件、组件或其他代码的已编译程序集(.dll 文件)。在应用程序中将自动引用 Bin 文件夹中的代码所表示的任何类。有关更多信息,请参见 ASP.NET 网站中的共享代码文件夹。 |
动态编译与预编译
例如我们在一个解决方案中创建了一个网站或者Web应用程序,用些人还在讨论他们的编译形式,有人说web应用程序必须要生成一次后在执行,于是我们自己试验了一下,结果完全扯淡,只要一个网站或者Web应用程序不依赖于外部程序集(例如三层架构生成的**.DLL),这个时候完全是动态编译的,也就是说它是在我们浏览页面的时候用运行时自动编译,同时第一次编译以后就会存在缓存中,之后如果不修改文件就不需要再次编译,否则自动重新编译。或许你有疑问既然它编译成程序集后怎么和页面联系在一起,我们只要按图索骥,C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\你就会发现好多你从前创建过得程序的编译后的程序集,我们打开一个含有WebSite编译后的程序集的文件夹,找到后缀***.compiled的文件,打开一看你就恍然大悟了,这里就不演示了,自己打开看看就明白了.
而预编译实在我们通常发布网站或者一个网站或者Web应用程序依赖于外部程序集是,“预”一下,预者就是提前的意思,就是必须先生成一下,当然你必须注意一下,每次生成的程序的文件名都是随机产生的,而不是固定不变的。