1. 程式人生 > >aspx與aspx.cs的關係

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

.NET就會將aspx.cs中的類作為基類,把當前的頁面(aspx檔案)及基類,編譯生成一個新的類(例如了B),然後由B類產生物件在伺服器端生成HTML檔案傳送給客戶端,所以說這裡是繼承關係,大家可以在aspx檔案的開頭看到如下語言也足可以說明這一點:<%@   Page   language="c#"   Codebehind="WebForm1.aspx.cs"   AutoEventWireup="false"   Inherits="WebApplication1.WebForm1"   %>其中的Inherits="WebApplication1.WebForm1"就說明了這種繼承關係

轉自:http://blog.csdn.net/kongbai308416350/article/details/4468031

========================================================================================

在vs中,有很多朋友問起,在一個網站專案中的aspxaspx.cs檔案的關係,現在就歸納如下:

可以把aspx檔案分成三部分:

run=”server”屬性的標籤

<% %>

標準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.aspxbin中的這個dll,現在我們用反身工具Red Gate’s .NET Reflector來檢視這個dll檔案,發現在這個檔案中,只有一個類_Defaule,如下圖:

(圖四)

好,我們已經把知識都準備好了,接下來分析圖一。

按照圖一的說法,編譯成dll後,這個_Default這個類中應該有包括aspx.cs檔案中的和aspx中有run=”server”屬性的標籤,當然,在類中就成為一個欄位,並且是控制元件型別的欄位了。我們在圖四中可以看出,在aspx.cs中的jkaspx中的form1表單和But_Yes按鈕都可以看到,但看不到<%%>中的iaspx.csaspx中有run=”server”屬性的標籤是怎麼樣編譯在一個類中的呢?原因在aspx.cs中,類_Default前的關鍵partial的功勞,我們都知道,這是一個分部類的關鍵字,就是可以把一個類分成兩塊來寫,或分到兩個檔案中去寫,aspx.cs是一部分,另一部分呢?另一部分就是在aspx中用run=”server”屬性的籤標,這些標籤成為_Default類的一個欄位,所以我們能在aspx.cs中能訪問到這些標準。

我們接下來再看圖一,在有請求到達服務端時,服務端就會把aspx<%%>生成一個類,並且這個類是繼承_Default這個類的,這樣也就是說,在<%%>中的程式碼,能訪問到aspx.cs_Default中的非私有變數,也就是我們訪問不到_Default類中的j,但能訪部到該類中的k

最後,_Default的子類和HTML程式碼在IISCLR的協作下,生成頁面檔案傳送給客戶端。

綜上我們可以看出,aspx.cs檔案和伺服器端控制元件生成一個類,<%%>生成一個類,後面的類是在執行時生成,它是繼承前面的類,最後再結合aspx檔案中的HTML生成頁面檔案傳送給客戶。

(以上是在vs2008測試通過)


轉自:http://www.cnblogs.com/axzxs2001/archive/2009/01/19/1378383.html