请问asp.net高手aspx与cs的关系

2024-11-25 07:38:56
推荐回答(5个)
回答1:

呵呵,这个问题还重来没想过。
页面不是继承cs文件。aspx 和含派 .cs它们是一个数组 ,也就是说它们是平级的。
至于楼主问的.cs文件为什么能访问aspx里的id,button等等,只是在.cs类里面有个Page_Load事件,当用户一点击button,然后asp.net将整个aspx整个页面传回到cs,Page_Load中,编译cs时解析才能获得到,然后在将整个aspx页面解析成html文件一起传回页面,这也就是为什么当我们点击一下页面的控件整个厅弯页面会刷新一下的问题,之后才会出来什么ajax控件等技术。
至于后台有两个文件.cs和designer.cs. ASP不是把后台代码和前台谈伏贺显示代码放在一起的吗,那样维护起来有点乱,现在改变成asp.net就把它分开了,但是实际上它们还是在一类中,用了partial,编译时生成在一个文件存放在dll中的。

回答2:

在编译的过程中,好像是要合成一个类,在。net3.5(粗森还是3.0)以前吧,(VS2003包括以前禅裂),是继承的关系岩袭亩!!现在是合并的关系。

回答3:

.aspx是设计页面颤虚,而.cs是类页面,也就是说设计页面用到的类信息在这个页面里面,银槐其实就是把设计和实现分离开锋洞友来。
这两个文件本来就有不同职责,怎么会合并?但是肯定是要联合生成一个文件。
partial类是类的一部分,显然完整的类即是把所有此类的partial类合并在一起形成一个完整的类。
加上partial关键字就像是分页的功能,一张纸不够写还要写在另一张上,最后合起来就好了。

回答4:

浏览器在编译时,先编肆扒译cs中的内容,然后编译aspx,你可以把aspx也看做是一种类,至于你说的橘雹悄那个继承其实不是的,.net在iss之前会先“捕圆渣获”你的页面进行编译,这时会把asp控件编译为html标准可以识别的控件类型,例如button会被编译成input~

回答5:

在vs中,有很多朋友问起,在一个网站项目中的aspx和aspx.cs文件的关系,现在就归纳如下:

可以把aspx文件分成三部分:

l 有run=”server”属性的标签

l <% %>

l 标准HTML标签

再算上aspx.cs,一共是四块,我们分别来说他们的关系。

(图一)

我们来做个例子,结合上面的例子来看一下吧。

我们新建一个网站,页面如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>







无标题页











<% int i = 10;

this.k = i;

%>









后参代码如下:

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测试通过)