ASP.NET 2.0後台代碼與內聯代碼的對比

來源:互聯網
上載者:User
asp.net|後台

  內聯(Inline)代碼的分離

  下面的例子示範了一個簡單的帶有三個伺服器控制項(分別是文字框、按鈕和標籤)的ASP.NET頁面。最初這些控制項呈現的內容與HTML形式是相同的。但是,當你在用戶端的文字框中輸入值並點擊按鈕的時候,該頁面會發回伺服器並且在該頁面的代碼中處理這個點擊事件,動態地更新標籤控制項的Text屬性。接下來這個頁面會重新呈現以反映更新過的文本。這個簡單的例子示範了伺服器控制項模型背後的基本原理,它使ASP.NET成為最容易學習和掌握的Web編程模型之一。

<%@ page language="VB" %>
<script runat="server">
Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Label1.Text = "Hello " & TextBox1.Text
End Sub
</script>

<html>
<head>
<title>ASP.NET Inline Pages</title>
</head>
<body>
<form id="Form1" runat="server">
<h1>Welcome to ASP.NET 2.0!</h1>
<b>Enter Your Name:</b>
<asp:TextBox ID="TextBox1" Runat="server"/>
<asp:Button ID="Button1" Text="Click Me" Runat="server"/>
<br />
<br />
<asp:Label ID="Label1" Text="Hello" Runat="server" />
</form>
</body>
</html>
  請注意:上面的例子中的按鈕事件處理常式位於包含伺服器控制項的同一個頁面中的<script></script>標記之內。ASP.NET把這種情況稱為頁面編程代碼內聯(code-inline),當你希望在同一個檔案中處理代碼和顯示邏輯的時候,它是非常有用的。但是,ASP.NET還支援另外一種用於存放你的代碼和顯示內容的方法,稱為後台代碼(code-behind)模型。使用後台代碼的時候,處理事件的代碼位於與伺服器控制項和標記的分頁檔分離的另一個物理上獨立的檔案之中。當你需要維護這些獨立的檔案(例如多個人一起建立應用程式)的時候,代碼和內容之間的這種清晰的分離是非常有用的。在小組項目中,設計者處理應用程式的UI部分,開發人員處理行為或代碼是很常見的,後台代碼模型適合於這種情況。

  簡化的後台代碼模型

  ASP.NET 2.0為後台字碼頁面引入了一個改良的運行時(runtime),它簡化了頁面和代碼之間的串連。在新的後台代碼模型中,頁面被聲明為局部(partial)類,允許在運行時把頁面和代碼檔案編譯到一個類中。頁面代碼引用CodeFile屬性和<%@ Page %>指令中的後台代碼檔案,在Inherits屬性中指定類的名稱。請注意,後台代碼類的成員必須是公用的(public)或受保護的(protected),不能是私人的(private)。

<%@ page language="VB" CodeFile="CodeBehind_vb.aspx.vb" Inherits="CodeBehind_vb_aspx" %>

<html>
<head>
<title>ASP.NET CodeBehind Pages</title>
</head>
<body>
 <form runat="server">
  <h1>Welcome to ASP.NET 2.0!</h1>
  <b>Enter Your Name:</b>
  <asp:TextBox ID="TextBox1" Runat="server"/>
  <asp:Button ID="Button1" Text="Click Me" Runat="server"/>
  <br />
  <br />
  <asp:Label ID="Label1" Text="Hello" Runat="server" />
 </form>
</body>
</html>
  簡化的後台代碼模型的優勢在於,你不必單獨地在後台代碼類中聲明伺服器控制項變數。使用局部類(2.0中的新特性)允許ASPX頁面中的伺服器控制項ID直接被後台代碼檔案訪問。這極大地簡化了後台字碼頁面的維護工作量。

  在頁面之間共用代碼

  儘管可以在網站的每個頁面中放置代碼(使用內聯或者後台代碼分離模型),還是可能遇到希望在網站的多個頁面之間共用代碼的情況。把代碼複製到需要它的每個頁面是一種低效率的和難於維護的方法。幸運的是,ASP.NET提供了幾個讓代碼供應用程式的所有頁面訪問的方法。

  代碼目錄

  頁面可以在運行時動態編譯,代碼檔案(例如.cs和.vb檔案)也可以。ASP.NET 2.0引入了App_Code目錄,它可以包含那些含有代碼的獨立的檔案,而這些代碼可供應用程式的多個頁面訪問。ASP.NET 1.x要求這些共用檔案先行編譯到Bin目錄中,然而App_Code目錄中的代碼檔案將在運行時動態地編譯,並供應用程式使用。把多種語言建立的代碼檔案放在App_Code目錄中是可行的,這時候應該把它們放在不同的子目錄中(在Web.config中註冊具體語言)。下面的例子示範了使用App_Code目錄包含一個類檔案,頁面會調用它。

<%@ page language="VB" %>

<script runat="server">
Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
 Dim c As New CustomClass
 Label1.Text = c.GetMessage(TextBox1.Text)
End Sub
</script>

<html>
<head>
<title>ASP.NET Inline Pages</title>
</head>
<body>
<form id="Form1" runat="server">
 <h1>Welcome to ASP.NET 2.0!</h1>
 <b>Enter Your Name:</b>
 <asp:TextBox ID="TextBox1" Runat="server"/>
 <asp:Button ID="Button1" Text="Click Me" Runat="server"/>
 <br />
 <br />
 <asp:Label ID="Label1" Text="Hello" Runat="server" />
</form>
</body>
</html>
  在預設情況下,App_Code目錄只能包含相同語言的檔案。但是,為了在App_Code目錄中包含多種語言的檔案,你可以把App_Code目錄劃分為多個子目錄(每個子目錄包含相同語言的檔案)。為了實現這個目標,你必須在應用程式的Web.config檔案中註冊每個子目錄。

<configuration>
<system.web>
 <compilation>
  <codeSubDirectories>
   <add directoryName="Subdirectory"/>
  </codeSubDirectories>
 </compilation>
</system.web>
</configuration>
  下面的例子示範了一個劃分過的App_Code目錄,它同時包含了VB和C#語言的檔案。

<%@ page language="VB" %>

<script runat="server">
Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
 Dim c As New CustomClass
 Label1.Text = c.GetMessage(TextBox1.Text)
 Dim c2 As New CustomClass2
 Label2.Text = c2.GetMessage(TextBox1.Text)
End Sub
</script>

<html>
<head>
<title>ASP.NET Inline Pages</title>
</head>
<body>
<form id="Form1" runat="server">
 <h1>Welcome to ASP.NET 2.0!</h1>
 <b>Enter Your Name:</b>
 <asp:TextBox ID="TextBox1" Runat="server"/>
 <asp:Button ID="Button1" Text="Click Me" Runat="server"/>
 <br />
 <br />
 <asp:Label ID="Label1" Runat="server" />
 <br />
 <asp:Label ID="Label2" Runat="server" />
</form>
</body>
</html>
  Bin目錄

  ASP.NET第一版本就支援Bin目錄,它與Code目錄類似,只不過它能包含先行編譯的組件。當你需要使用他人的一些代碼的時候,它就非常有用了。在這種情況下,你不需要訪問原始碼(VB或C#檔案),而是使用編譯過的DLL檔案。簡單地把組件放在Bin目錄中就可以使用它了。在預設情況下,Bin目錄中的所有組件都會被自動地載入應用程式並供頁面訪問。你需要使用頁面頂部的@Import指令匯入Bin目錄中的組件的名字空間。

<@ Import Namespace="MyCustomNamespace" >
  全域組件緩衝

  .NET架構組件2.0包含了大量的表現架構組件不同部分的組件。這些組件都儲存在全域組件緩衝中,它是一個可供電腦上所有應用程式(不是供特定的應用程式使用)使用的組件倉庫。架構組件中的幾個組件會自動地供ASP.NET應用程式使用。你可以在應用程式的Web.config檔案中註冊額外的組件。

<configuration>
 <compilation>
  <assemblies>
   <add assembly="System.Data, Version=1.0.2411.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"/>
  </assemblies>
 </compilation>
</configuration>
  請注意,你還是必須使用@Import指令,讓單獨的頁面可以使用這些組件。

相關文章

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.