在vs中,有很多朋友问起,在一个网站项目中的
aspx
和
aspx.cs
文件的关系,现在就归纳如下:
可以把
aspx
文件分成三部分:
l
有
run=”server”
属性的标签
l
<% %>
l
标准
HTML
标签
再算上
aspx.cs
,一共是四块,我们分别来说他们的关系。
(图一)
我们来做个例子,结合上面的例子来看一下吧。
我们新建一个网站,页面如下:
<%
@
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>
无标题页</title>
</
head
>
<
body
>
<form id="form1" runat="server">
<div>
<asp:Button ID="But_Yes" runat="server" Text="Button" />
<% int i = 10;
this.k = i;
%>
</div>
</form>
</
body
>
</
html
>
后参代码如下:
using
System;
using
System.Configuration;
using
System.Data;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
public
partial class _Default : System.Web.UI.Page
{
int j = 10; //
私用成员
protected int k=100; //
保护成员
protected void Page_Load(object sender, EventArgs e)
{
But_Yes.Text = "
确定"
;
}
}
对这个例子我们来分析一下。
首先,我们要发布这个,会看到发布的文件有如下图所示:
(图二)
(图三)
我们主要看
Default.aspx
和
bin
中的这个
dll
,现在我们用反身工具
Red Gate’s .NET Reflector
来查看这个
dll
文件,发现在这个文件中,只有一个类
_Defaule
,如下图:
(图四)
好,我们已经把知识都准备好了,接下来分析图一。
按照图一的说法,编译成
dll
后,这个
_Default
这个类中应该有包括
aspx.cs
文件中的和
aspx
中有
run=”server”
属性的标签,当然,在类中就成为一个字段,并且是控件类型的字段了。我们在图四中可以看出,在
aspx.cs
中的
j
,
k
和
aspx
中的
form1
表单和
But_Yes
按钮都可以看到,但看不到
<%%>
中的
i
。
aspx.cs
和
aspx
中有
run=”server”
属性的标签是怎么样编译在一个类中的呢?原因在
aspx.cs
中,类
_Default
前的关键
partial
的功劳,我们都知道,这是一个分部类的关键字,就是可以把一个类分成两块来写,或分到两个文件中去写,
aspx.cs
是一部分,另一部分呢?另一部分就是在
aspx
中用
run=”server”
属性的签标,这些标签成为
_Default
类的一个字段,所以我们能在
aspx.cs
中能访问到这些标准。
我们接下来再看图一,在有请求到达服务端时,服务端就会把
aspx
中
<%%>
生成一个类,并且这个类是继承
_Default
这个类的,这样也就是说,在
<%%>
中的代码,能访问到
aspx.cs
中
_Default
中的非私有变量,也就是我们访问不到
_Default
类中的
j
,但能访部到该类中的
k
。
最后,
_Default
的子类和
HTML
代码在
IIS
和
CLR
的协作下,生成页面文件发送给客户端。
综上我们可以看出,
aspx.cs
文件和服务器端控件生成一个类,
<%%>
生成一个类,后面的类是在运行时生成,它是继承前面的类,最后再结合
aspx
文件中的
HTML
生成页面文件发送给客户。
(以上是在
vs2008
测试通过)
本文转自桂素伟51CTO博客,原文链接:http://blog.51cto.com/axzxs/149943 ,如需转载请自行联系原作者