asp.net|編譯 利息計算機
首先,我們開啟 Visual Studio .NET Whidbey,建立一個名為 Compilation 的新 Web 網站。建立 Web 網站之後,IDE 應與圖 1 類似。
圖 1:Visual Studio .NET Whidbey Web 網站
然後,我們將 \Code 檔案夾添加到該 Web 網站,添加方法為右擊該項目,然後選擇 New Folder(建立檔案夾)。此檔案夾必須命名為 Code,但名稱不區分大小寫。添加檔案夾後,我們可以添加一個新的類檔案:右擊 \Code 檔案夾,單擊 Add New Item...(添加新項...),然後在 Add New Item(添加新項)對話方塊的 Templates(模板)窗格中選擇 Class(類)項。將類命名為 CalculateInterest.vb。然後添加用於計算利息的代碼(將其添加到 Class 和 End Class 語句之間):
Public Function CalcBalance(ByVal Prncpl As Integer, _ ByVal Rate As Double, _ ByVal Years As Integer, _ ByVal Period As Integer) As String Dim BaseNum As Double = (1 + Rate / Period) CalcBalance = _ Format(Prncpl * System.Math.Pow(BaseNum, _ (Years * Period)), "#,###,##0.00").ToStringEnd Function
建立組件類後,我們需要修改 Default.aspx 頁面以提供用來輸入資料的欄位,還需要調用組件的 CalcBalance 方法。為了簡單起見,Default.aspx 的完整列表顯示如下(請注意,Default.aspx 使用單檔案代碼模型)。
Default.aspx:
<%@ page language="VB" %><script runat="server"> Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Dim Calc As New CalculateInterest Label6.Text = "$" & _ Calc.CalcBalance(Convert.ToInt32(TextBox1.Text), _ (Convert.ToInt32(TextBox2.Text) / 100), _ Convert.ToInt32(TextBox3.Text), _ Convert.ToInt16(Dropdownlist1.SelectedValue)) Label6.Visible = True End Sub</script><html><head runat="server"> <title> 利息計算機</title></head><body> <form runat="server"> <asp:label id="Label1" runat="server">P本金 ($):</asp:label> <asp:textbox id="TextBox1" runat="server"> </asp:textbox> <br /> <asp:label id="Label2" runat="server">利率 (%):</asp:label> <asp:textbox id="TextBox2" runat="server"> </asp:textbox> <br /> <asp:label id="Label3" runat="server">年數:</asp:label> <asp:textbox id="TextBox3" runat="server"> </asp:textbox> <br /> <asp:label id="Label4" runat="server">複利頻率:</asp:label> <asp:dropdownlist id="Dropdownlist1" runat="server"> <asp:ListItem Value="1">每年</asp:ListItem> <asp:ListItem Value="4">每季</asp:ListItem> <asp:ListItem Value="12">每月</asp:ListItem> <asp:ListItem Value="365">每日</asp:ListItem> </asp:dropdownlist> <br /> <asp:label id="Label5" runat="server">結餘: </asp:label> <asp:label id="Label6" visible="false" runat="server"></asp:label> <br /> <asp:button id="Button1" runat="server" text="計算" /> </form></body></html>
在設計檢視中,修改後的 Default.aspx 應與圖 2 類似。
圖 2:設計檢視中的 Default.aspx
需要注意是,當您在用於調用組件類的 <指令碼> 塊中鍵入代碼時,將獲得完整的 IntelliSense 陳述式完成(包括組件類),如圖 3 所示。這是在 Visual Studio .NET 2003 基礎上的一大改進,Visual Studio .NET 2003 不支援伺服器端 <指令碼> 塊中的 IntelliSense。
圖 3:源視圖中的 IntelliSense
瀏覽 Default.aspx 會產生圖 4 中所示的輸出。填入本金、利率和年數,然後單擊 Calculate(計算),輸出結果應與圖 5 類似。
圖 4:Default.aspx 的初始輸出
圖 5:計算後的輸出
資源檔 如果您以前在 Visual Studio .NET 2002 或 2003 中使用過 Web 應用程式,您一定已經注意到每次建立新 Web Form頁時,除了 .aspx 頁以及 .vb 或 .cs 模組化檔案之外,Visual Studio 還會建立一個具有 .resx 副檔名的匹配檔案(即 WebForm1.aspx.resx)。與大多數 Web 開發人員一樣,您可能也會忽略或試圖刪除這些檔案,因為它們的用途和/或用法並不是很直觀。簡言之,這些 .resx 檔案稱為“資源檔”,主要用於儲存各個版本的資源,例如用於本地化的不同語言的文本字串。
在 Visual Studio .NET 2002 和 2003 中,資源檔需要作為產生項目進程的一部分添加到項目程式集中,並且需要匯入兩個命名空間,建立一個 ResourceManager 對象,並調用其 GetString 方法以訪問資源字串。在 \Code 目錄的協助下,Visual Studio .NET Whidbey 中的資源訪問過程變得非常簡單,如下面的樣本所示。
我們先從建立資源檔開始,還是使用上一個樣本中的項目。首先,右擊剛才建立的 Compilation Web 網站,然後單擊 Add New Item...(添加新項...)。在 Add New Item(添加新項)對話方塊中,選擇 Assembly Resource File(程式集資源檔)模板,將資源檔命名為 strings.resx,然後單擊 Open(開啟)。strings.resx 檔案的預設視圖應與圖 6 類似。
圖 6:在 XML 編輯器中編輯資源檔
將以下項添加到資料表中(可以將“comment”(注釋)、“type”(類型)和“mimetype”(MIME 類型)列保留為空白):
名稱值 txtColorPrompt請選擇一種顏色:txtColorResponseGreen您選擇了綠色!txtColorResponseBlue您選擇了藍色!txtColorResponseRed您選擇了紅色!
現在重複上述過程,添加一個名為 strings.en-GB.resx 的新資源檔,並將以下項添加到其資料表中,然後儲存檔案(因為我們沒有添加 txtColorResponse* 的項,所以所有客戶機都將使用 strings.resx 中的這些項的值):
名稱值 txtColorPrompt請選擇一種顏色:
現在,為了充分利用 Code 目錄的神奇作用,我們需要將這兩個 .resx 檔案從 Web 網站的根目錄拖到 Code 目錄中。完成上述操作後,將得到類似圖 7 的結果。
圖 7:Code 目錄中的 .resx 檔案
為了說明現在使用建立的資源檔是多麼簡單,我們將一個 Web Form添加到項目中,方法如下:右擊 Web 網站節點,然後單擊 Add New Item....(添加新項...)。在 Add New Item(添加新項)對話方塊中,選擇 Web Form,將頁面命名為 ColorPicker.aspx,然後單擊 Open(開啟)。修改此頁面,使其與以下列表匹配。
ColorPicker.aspx:
<%@ page UICulture="en-GB" language="VB" %><script runat="server"> Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Label1.Text = Resources.strings.txtColorPrompt End Sub Sub Submit_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Label1.ForeColor = _ System.Drawing.Color.FromName(Dropdownlist1.SelectedValue) Select Case Dropdownlist1.SelectedValue Case "紅色" Label1.Text = Resources.strings.txtColorResponseRed Case "綠色" Label1.Text = Resources.strings.txtColorResponseGreen Case "藍色" Label1.Text = Resources.strings.txtColorResponseBlue End Select Dropdownlist1.Visible = False Submit.Visible = False End Sub</script><html><head runat="server"> <title>色彩選擇器</title></head><body> <form runat="server"> <asp:label id="Label1" runat="server">Label</asp:label> <asp:dropdownlist id="Dropdownlist1" runat="server"> <asp:listitem value="Red">紅色</asp:listitem> <asp:listitem value="Green">綠色</asp:listitem> <asp:listitem value="Blue">藍色</asp:listitem> </asp:dropdownlist> <asp:button id="Submit" text="提交" runat="Server" /> </form></body></html>
當從瀏覽器中瀏覽 ColorPicker.aspx 時,預設輸出與圖 8 類似。如果從為英國使用者佈建的系統中瀏覽此頁面(您可以通過將頁面的 UICulture 屬性設定為“en-GB”並儲存頁面來類比此情形),輸出將與圖 9 類似(請注意,我們已經在“colour”中添加了 u)。
圖 8:ColorPicker.aspx 的預設輸出
圖 9:英國系統的 ColorPicker.aspx 輸出
請注意,在 ASP.NET Whidbey 中訪問資源檔只需要一行代碼。因為將資源檔放到 Code 目錄中後,即可自動嵌入和引用該資源檔,所以不需要引用任何命名空間或程式集,也不需要為訪問資源字串建立對象。而且 ASP.NET 還可以確定應該使用哪個資源檔(基於使用者瀏覽器的設定),因此我們不需要在運行時對此進行判斷並作出相應的響應。ASP.NET 可以協助我們完成這一切。