当我们新建一个站点的时候,如果使用默认模板的话,VS2008会自动产生一个Default.aspx窗体页.
他的初始代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
我们首先来看看@Page这个指令,发现他包含4个属性:<!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">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
language : 指定页中所有内联呈现,代码声明块或者代码隐藏文件使用的编程语言.
这里有必要说明下内联呈现,代码声明块和代码隐藏文件的区别.
1.代码呈现块语法如下:
<% 内联代码 %>
<%= 内联表达式 %>
举个例子: <%= 内联表达式 %>
<% Response.Write("hello"); %>
<%= "hello" %>
上面的效果是一样的,因为内联表达式是调用Response.Write的快捷方式.<%= "hello" %>
2.代码声明块
代码声明块必须定义在<script>标记中,并且必须使用runat="server"属性标记.
<script runat="server">
// 代码在此 o(∩_∩)o哈哈
</script>
// 代码在此 o(∩_∩)o哈哈
</script>
3.代码隐藏文件
OK,也就是Default.aspx.cs
我们接着看后面的属性,先来熟悉下CodeFile和Inherits属性吧...
CodeFile指定页的代码隐藏文件
Inherits指定页继承的代码隐藏类,我们打开代码隐藏文件Default.aspx.cs,就会看到这个类了,该类从Page类派生
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
ok,继续... 我们重点讲讲AutoEventWireup属性.
该属性默认情况下为true,那么到底有什么用呢,别急,待我具体说来...
我们先打开Default.aspx.cs,写下如下代码:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("测试中,请勿打扰");
}
}
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("测试中,请勿打扰");
}
}
右键点击Default.aspx,选择View in Browser
这时应该显示测试中,请勿打扰...
现在,我们把AutoEventWireup属性设置成false,右键点击Default.aspx,选择View in Browser,发现只是一个空白页.
由此,我们可以推出,该属性是将Page对象和他的事件处理程序关联起来,相当于:
Page.Load += new EventHandler(Page_Load);
OK,我们现在只是简单地了解了这几个属性,接下来我们进入详细的分析阶段,准备好了吗,嘿嘿,去泡杯水,开始啦
我们先在default.aspx页中加入如下代码:
<div>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
<asp:Label ID="Label1" runat="server" Text='<%# DateTime.Now %>'></asp:Label>
</div>
对了,别忘了把AutoEventWireup属性设回true哦@@<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
<asp:Label ID="Label1" runat="server" Text='<%# DateTime.Now %>'></asp:Label>
</div>
这里的<%# %>构造块是数据绑定表达式语法,将Text属性设置成DateTime.Now变量的值,然后在代码隐藏文件中进行绑定..
然后在代码隐藏文件中加入如下代码:
protected void Page_Load(object sender, EventArgs e)
{
DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("早上好!");
}
当我们向服务器提交请求时,如果是第一次请求,则Page.IsPostBack=false,否则,说明是回发请求.当请求到达服务器时,asp.net首先确定是否要分析和编译该页面,然后再加载编译好的程序集.{
DataBind();
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write("早上好!");
}
让我们来看看怎么把default.aspx转换成一个类,然后再编译成一个程序集吧?
首先,在default.aspx窗体页的@Page指令中加入Debug="true"启用调试.
进入asp.net临时文件夹下,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\
进入你的解决方案目录,你会看到有两个文件夹:
确定哪个文件夹是我们想要的,我们要分析的那个文件夹下面有好多文件.
来到那个文件,你会看到有连续的三个类文件.
就像:
App_Web_XXXXXXX.0.cs
App_Web_XXXXXXX.1.cs
App_Web_XXXXXXX.2.cs
我们先打开App_Web_XXXXXXX.0.cs
这是我们的窗体页转换后的结果,其中包含了两个类:
public partial class _Default : System.Web.SessionState.IRequiresSessionState {
public class default_aspx : global::_Default, System.Web.IHttpHandler {
先来看第一个类:public class default_aspx : global::_Default, System.Web.IHttpHandler {
#line 12 "F:\WebSite8\Default.aspx"
protected global::System.Web.UI.WebControls.Button Button1;
#line default
#line hidden
#line 13 "F:\WebSite8\Default.aspx"
protected global::System.Web.UI.WebControls.Label Label1;
#line default
#line hidden
#line 10 "F:\WebSite8\Default.aspx"
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
#line default
#line hidden
protected System.Web.Profile.DefaultProfile Profile {
get {
return ((System.Web.Profile.DefaultProfile)(this.Context.Profile));
}
}
protected System.Web.HttpApplication ApplicationInstance {
get {
return ((System.Web.HttpApplication)(this.Context.ApplicationInstance));
}
}
}
#line 12,13,10 分别定义了Button变量Button1,Label变量Label1以及Form变量from1,回到我们的窗体页看看他们分别对应什么,对了,是控件id号.
再来看第二个类:机子比较卡,我分到下一篇文章中. http://www.cnblogs.com/honey/articles/1161203.html