aspx與aspx.cs的關係
aspx和對應的.aspx.cs是一個頁面一個程式碼,頁面基本上只負責顯示格式之類的,而所有的伺服器端動作都是在aspx.cs中定義的。也就是說他們其實是一個東西的兩面,aspx中所有伺服器端控制元件都可以在對應的aspx.cs中使用,反之亦然,當然也可以定義對應的動作,如果是在IDE中開發的話,不需要你進行任何額外的工作。而在編譯之後,aspx.cs變成了bin目錄下的dll,而aspx檔案沒什麼變化,釋出的時候只需要把aspx和dll帶上就可以了,cs檔案作為原始碼不需要釋出出去.
ASPX是前臺,表示設計頁面,ASPX.CS是後臺,是程式碼功能實現,分開來設計是為了程式碼清晰,功能模組化,
這是Code-Behind結構,即程式碼在頁面HTML的後面。
在.aspx檔案中,主要是頁面的HTML;
而在.aspx.cs檔案中,是C#程式碼,在.aspx中新增的控制元件的事件,它的程式碼都在.aspx.cs中。
打一個不恰當的比喻:
.aspx頁面的內容就像我們平時編的靜態網頁(.htm,.html)--當然不是完全一樣。
.aspx.cs中的內容,就非常像我們開發windows平臺下的軟體一樣(例如delphi,VC等)--當然也不是完全一樣。
而深入其中的研究貌似我還是有點似懂非懂..但是還是貼上吧:
aspx.cs檔案中存放有一個類(例如WebForm1),在你向伺服器請求該頁面時,ASP
轉自:http://blog.csdn.net/kongbai308416350/article/details/4468031
========================================================================================
在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測試通過)
轉自:http://www.cnblogs.com/axzxs2001/archive/2009/01/19/1378383.html