ASP.NET:瞭解WEB表單的代碼模型

來源:互聯網
上載者:User
asp.net|web   一個ASP.NET頁面由兩部分組成:一是使用靜態文本和伺服器控制項的使用者介面定義,二是使用者介面行為和伺服器端代碼形式的Web應用程式邏輯的實現。

  ASP.NET提供了全新的代碼模型,使得網頁開發人員和開發工具能夠更清晰、更容易地把代碼與表示分開。對比ASP來說,這個特徵是一個重要的改進,ASP需要代碼遍布在整個頁面的靜態內容之中。ASP.NET代碼模型使得開發和設計團隊中的分工更加容易,並增加了代碼和內容的可讀性和可維護性。

  這個全新的代碼模型通常使用兩種形式之一。第一種形式僅僅是在.aspx分頁檔內的< script runat=”server”></script>指令碼代碼塊中內嵌程式碼,這種形式被稱為行內代碼(inline code), ASP.NET Web Matrix、DreamweaverMX等軟體採用的就是這種代碼編寫模型。第二種形式包含實現從Page中派生的類,在獨立的檔案中儲存代碼並且通過Page指令把它與.aspx檔案聯絡起來。這種形式一般稱為代碼分離(code-behind),有時也成為程式碼後置技術,Visual Studio.NET採用是這種模型。無論採用那種編程模型,效能是一樣的,只是不同的編程工具,又不同的編寫方法和使用習慣,重要的一點就是在使用ASP.NET的類之前,必須引入類所在的命名空間。

  同時Web表單的返回處理過程是基於事件驅動型的,提交頁面為自身,因此在每個Web表單的控制項布局代碼必須放在<body><form runat=server></from></body>HTML代碼塊中的。

  在下面兩節中,我們通過執行個體來示範行內代碼模型和在Visual Studio.NET2003實現的分離模型編。

  4.2.1 利用行內代碼模型編寫Web應用程式

  行內代碼編程模型更近似與ASP的升級,HTML代碼和應用程式的邏輯代碼一同儲存在.aspx分頁檔中,在第一次被訪問時編譯成Page基類,以後每次訪問都是直接有該Page類產生Web頁面。在第一章的第5節中,我們引用了一個顯示“Hello,ASP.NET!”的執行個體,就是採用的行內代碼編程模型編寫的。下面時NewFile.aspx的全部代碼:

  <%@ Page Language="VB" %>
  <!-- 邏輯代碼部分開始 ->
  <script runat="server">
    ' Insert page code here
     sub page_load(sender as object ,e as eventargs)
    Response.Write("Hello, ASP.NET!")
   End Sub
  </script>
  <!-- 邏輯代碼部分結束->
  <html>
  <head>
  </head>
  <body>
  <FORM runat="server">
  <!-- Insert content here -->
  </FORM>
  </BODY>
  </HTML>

  通過瀏覽器瀏覽效果如圖4.3所示:


圖4.3 NewFile.aspx運行結果

  行內代碼的好處較之與Visual Studio.NET來說,代碼比較簡潔,同時,一個Web應用程式中的每個ASP.NET頁面可以採用不同的語言編寫,比如NewFile.aspx可以採用VB.NET ,NewFile2.aspx可以採用C#,NewFile3.aspx可以採用J#。但是,每一個ASP.NET頁面必須只使用一種語言。

  4.2.2 利用程式碼後置技術編寫Web應用程式

  Visual Studio.NET就是典型的利用程式碼後置技術編寫Web應用程式的工具軟體, VS.NET為Web應用程式中的每個Web表單提供了三個不同的視窗:

  (1)設計視窗:採用所見即所得 (WYSIWYG)的方式,可以用滑鼠直接幹預控制項或是其他可視效果的位置。視窗的切換按鈕表徵圖是 ;

  (2)HTML代碼視窗:可以查看Web表單的HTML代碼,並且可以修改、編寫。編寫HTML代碼的時候,Visual Studio.NET系統提供智能提示的功能。視窗切換按鈕表徵圖;

  (3)邏輯代碼視窗:即是程式碼後置技術中邏輯代碼視窗,每個Web表單都有一個對應的邏輯代碼檔案,有VS.NET自動把Web表單的邏輯代碼源引用到.aspx分頁檔中。每個邏輯代碼檔案的名稱是在對應的ASP.NET分頁檔名稱後再加尾碼名.vb(C#語言編寫的源檔案加尾碼名.cs)。如,WebForm1.aspx的邏輯代碼檔案為WebForm1.aspx.vb。如果要進入Web表單的邏輯代碼,只需要在設計視窗中雙擊Web表單介面就進入了邏輯代碼視窗。

  我們用VS.NET2003開啟在第三章中建好的Web項目――MyFirst應用程式,開啟後,系統預設進入了WebForm1.aspx的設計視窗,如圖4.4所示。


圖4.4 WebForm1.aspx的設計視窗

  單擊按鈕表徵圖 ,就進入了WebForm1.aspx的HTML代碼視窗,如圖4.5所示。


圖4.5 WebForm1.aspx的HTML代碼視窗

  下面是WebForm1.aspx的所有HTML代碼:

  <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="MyFirst.WebForm1"%>
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <HTML>
   <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
   </HEAD>
   <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
     <FONT face="宋體"></FONT>
    </form>
   </body>
  </HTML>

  在<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="MyFirst.WebForm1"%>中,聲明了Page類使用的程式設計語言,Codebehind="WebForm1.aspx.vb"指明該頁面的邏輯代碼儲存在WebForm1.aspx.vb檔案中。

  在WebForm1.aspx的設計視窗中,我們對表單介面雙擊,就進入了WebForm1.aspx的邏輯代碼視窗,即:WebForm1.aspx.vb。WebForm1.aspx.vb是系統自動產生的,在它的代碼中包括對WebForm1.aspx中引用控制項的聲明和表單設計器自動產生的程式碼。在WebForm1.aspx.vb視窗中編寫代碼時,系統提供了智能填充的功能,例如如果你不知道使用類的具體名字而只知道類所在的命名空間,你只要敲出命名空間和“.”,智能填充就會給出該命名空間中所有類名稱,這對於初學者很有協助,對提高別稱效率也很有協助。WebForm1.aspx.vb的視窗如圖4.6所示。


圖4.6 WebForm1.aspx的邏輯代碼視窗

  在WebForm1.aspx.vb中,包含了Web表單編譯時間必須的一些函數。下面是WebForm1.aspx.vb檔案的全部代碼:

  Public Class WebForm1
    Inherits System.Web.UI.Page
  #Region " Web Form設計器產生的程式碼 "
    '該調用是 Web Form設計器所必需的。
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
  End Sub
    '注意: 以下預留位置聲明是 Web Form設計器所必需的。
    '不要刪除或移動它。
    Private designerPlaceholderDeclaration As System.Object
  Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: 此方法調用是 Web Form設計器所必需的
        '不要使用代碼編輯器修改它。
        InitializeComponent()
  End Sub
  #End Region
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此處放置初始化頁的使用者代碼
  End Sub
  End Class

  上面代碼中的注釋部分也是系統自動添加的,並且系統也自動產生了WebForm1.aspx表單的Page_Load事件程序。
  我們在這個事件程序中添加代碼:

  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此處放置初始化頁的使用者代碼
        '下面是要顯示的內容
        Response.Write("I Love China! I Love The Great Wall!")
  End Sub

  然後按F5,Visual Studio.NET會自動編譯整個MyFirst應用程式,然後調用IE了瀏覽器開啟WebForm1.aspx(本執行個體中WebForm1.aspx為預設啟動表單),也可以在WebForm1.aspx的設計表單中右擊滑鼠,在快顯功能表中選擇【在瀏覽器中查看】,就可以直接在Visual Studio.NET的Integration Environment中查看WebForm1.aspx編譯後的運行效果,如圖4.7所示,這個方法適合預覽非預設啟動表單。當然,可以編譯整個Web應用程式,然後在IE瀏覽器中直接輸入地址也可以預覽運行效果。


圖4.7 非預設啟動表單的預覽方式

  無論採用那一種方式預覽Web表單,都是必須經過編譯的。Visual Studio.NET會把編譯後產生的Page基類存放於應用程式根目錄下的bin檔案夾中,以後每次訪問直接調用該基類。本執行個體中產生的類為MyFirst.dll。我們編譯後通過瀏覽器查看WebForm1.aspx,結果如圖4.8所示。

圖 4.8 WebForm1.aspx的運行結果

  採用程式碼後置技術編寫的Web應用程式邏輯上比較明朗,一方面減少了.aspx頁面的檔案長度,另一方面,Web應用程式正式發布到伺服器後,邏輯代碼檔案經過編譯產生基類檔案(DLL檔案)後,就可以刪除掉,從而做到對原始碼的保護。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。