服務(wù)熱線
153 8323 9821
.net 開發(fā) wap 網(wǎng)站
即將到來的 3G 技術(shù),將使得移動(dòng)設(shè)備突破現(xiàn)在的帶寬限制,這樣我們就可以構(gòu) 建出許多新穎且功能強(qiáng)大的移動(dòng)應(yīng)用。 現(xiàn)在已經(jīng)有許多商業(yè)應(yīng)用都開始向移動(dòng)設(shè) 備上進(jìn)行遷移,所以對(duì)開發(fā)者來說,現(xiàn)在就開始移動(dòng)開發(fā)的學(xué)習(xí)將是一種非常適 合的時(shí)機(jī)。 在本文中我將介紹如何使用 Visual Studio 2005 創(chuàng)建一個(gè) ASP.NET 2.0 移 動(dòng)程序,然后介紹一些常用的移動(dòng)開發(fā)控件并以適合的方式在程序中加于應(yīng)用, 最后將談?wù)勅绾伍_發(fā)針對(duì)特定移動(dòng)設(shè)備的 WEB 程序和管理程序中的 ViewState(視圖狀態(tài))和 Session。 創(chuàng)建一個(gè)新的 ASP.NET 移動(dòng) WEB 程序 Visual Studio 2005 提供了一組功能強(qiáng)大且友好的開發(fā)工具來創(chuàng)建移動(dòng) WEB 程序,如果你已經(jīng)有創(chuàng)建傳統(tǒng)的 ASP.NET 應(yīng)用程序的經(jīng)驗(yàn),那么你就會(huì)發(fā)現(xiàn)創(chuàng)建 移動(dòng) WEB 程序和創(chuàng)建傳統(tǒng)的 ASP.NET 應(yīng)用程序是非常類似的。 你只需要?jiǎng)?chuàng)建一個(gè) ASP.NET 網(wǎng)站項(xiàng)目并添加一些移動(dòng) WEB 窗體即可。當(dāng)你添加移動(dòng) WEB 窗體后,你 就會(huì)發(fā)現(xiàn)在工具箱中添加了如下圖所示的 ASP.NET 移動(dòng)控件。
現(xiàn)在你可以按照如下的步驟在 Visual Studio 2005 創(chuàng)建一個(gè)新的 ASP.NET 移動(dòng) WEB 程序: 1. 選擇"文件"-"新建"-"網(wǎng)站" 2. 在"Visual Studio 已安裝的模板"列表中選擇"ASP.NET 網(wǎng)站" 3. 設(shè)置好程序的"位置"、"語言"和"路徑"等選項(xiàng)后,單擊"確定"按鈕。
當(dāng)你完成上述步驟后,就已經(jīng)創(chuàng)建好了一個(gè) ASP.NET 網(wǎng)站。現(xiàn)在我們就可 以在該網(wǎng)站中添加一些針對(duì)移動(dòng)設(shè)備的 WEB 窗體,其具體的實(shí)現(xiàn)過程如下: 1. 在 Visual Studio 2005 的"解決方案資源管理器"窗口中選擇剛才創(chuàng)建好 的網(wǎng)站項(xiàng)目,右鍵點(diǎn)擊并在彈出的菜單中選擇"添加新項(xiàng)"命令。 2. 在彈出的"添加新項(xiàng)"窗體中選擇"移動(dòng) WEB 窗體"項(xiàng)。 3. 設(shè)置窗體的"名稱"和"語言"等項(xiàng),并且確保"將代碼放在單獨(dú)的文件中" 選擇框處于選中狀態(tài)。 4. 單擊"添加"按鈕。
當(dāng)單擊"添加"按鈕后,你會(huì)發(fā)現(xiàn) Visual Studio 2005 自動(dòng)添加了兩個(gè)文件, 在這里窗體名稱被設(shè)置為"MobileDefault",因此這兩個(gè)文件分別為 MobileDefault.aspx 和 MobileDefault.aspx.cs (如果你選擇的語言為 VB 的 話,則這兩個(gè)文件為 MobileDefault.aspx 和 MobileDefault.aspx.vb)。 MobileDefault.aspx 文件包含在窗體使用的各個(gè) ASP.NET 移動(dòng)控件的聲明方 式,而 MobileDefault.aspx.cs 則包含了一些程序?qū)崿F(xiàn)代碼和事件處理代碼,這 和傳統(tǒng)的 ASP.NET 應(yīng)用程序采用的"代碼后置"的方式是一致的。 窗體添加完畢后, 我們就可以使用工具箱中的"移動(dòng) WEB 窗體"標(biāo)簽下的各個(gè) 控件。如同其它的 ASP.NET 控件一樣,我們也可以根據(jù)需求設(shè)置這些控件的屬性 和事件行為。你可以在"原代碼"窗口下直接輸入"<mobile: />"的語法方式來 添加移動(dòng)控件: <mobile:TextBox ID="MyTextBox" runat="server">< /mobile:TextBox> <mobile:Label ID="MyLabel" runat="server">標(biāo)簽控件< /mobile:Label> 下圖顯示了一個(gè)放置了 Label、TextBox 和 Command 控件的移動(dòng) WEB 窗體。 該窗體所實(shí)現(xiàn)的功能是根據(jù) TextBox 控件中輸入的 CustomerID 來查找相應(yīng)的用 戶信息,我們并沒有編寫對(duì)應(yīng)的邏輯代碼,只是顯示了該窗體的界面:
Visual Studio 2005 中對(duì)應(yīng)的 HTML 代碼如下所示,我們可以看到上述的 3 個(gè)控件均以 <mobile: 為前綴在頁面代碼中進(jìn)行了聲明。同樣的,F(xiàn)orm 也采用 了類似的方式加以聲明,見代碼 7 所示。在傳統(tǒng)的 ASP.NET 應(yīng)用程序中處理窗體 和處理控件的方式是不一樣的,這和移動(dòng) WEB 頁面有很大的差別。其最大的不同 就是開發(fā)人員可以在同一個(gè)移動(dòng) WEB 頁面中創(chuàng)建多個(gè)窗體, 并且可以在這些窗體 間自由地導(dǎo)航而無需回發(fā)到服務(wù)器。 利用該項(xiàng)特性可以減少因移動(dòng)設(shè)備帶寬小而 帶來的約束,大大減少了和服務(wù)器通訊的數(shù)據(jù)量。換句話說,移動(dòng)設(shè)備中是以窗 體為單位進(jìn)行顯示,而不是像傳統(tǒng)的 ASP.NET 程序那樣以頁面為單位進(jìn)行顯示。 我們使用移動(dòng)設(shè)備瀏覽不同屏的信息時(shí),可能并沒有跳轉(zhuǎn)到不同的頁面,而是在 同一個(gè)頁面的不同窗體間進(jìn)行跳轉(zhuǎn)。 01 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="MobileDefault.aspx.cs" 02 Inherits="MobileDefault" %> 03 <%@ Register TagPrefix="mobile" Namespace="System.Web.UI.MobileControls" 04 Assembly="System.Web.Mobile" %> 05 <html xmlns="http://www.w3.org/1999/xhtml" > 06 <body> 07 <mobile:Form id="Form1" runat="server"> 08 <mobile:Label id="lblID" Runat="server">Customer ID< /mobile:Label> 09 <mobile:TextBox id="txtCustID" Runat="server">< /mobile:TextBox> 10 <mobile:Command id="cmdGetCustomer" Runat="server">Find Customer 11 </mobile:Command> 12 </mobile:Form> 13 </body> 14 </html> ASP.NET 移動(dòng) WEB 窗體的開發(fā)視圖 Visual Studio 2005 的開發(fā)環(huán)境中提供 了三種視圖進(jìn)行 ASP.NET 移動(dòng) WEB 窗體的設(shè)計(jì)和開發(fā)。這三種視圖分別為設(shè)計(jì) 視圖、HTML 視圖和代碼視圖,我們可以針對(duì)不同的開發(fā)需求在這些視圖間進(jìn)行
切換。現(xiàn)在我們就這三種視圖進(jìn)行一個(gè)簡短的概要。 設(shè)計(jì)視圖 設(shè)計(jì)視圖狀態(tài)下將加載移動(dòng) WEB 窗體, 并且自動(dòng)呈現(xiàn)窗體中所包含的移動(dòng)控 件。你可以從工具箱中以拖拽的方式添加新的控件,你也可以通過屬性窗口修改 已存在的控件的屬性。如果想要移除窗體中的某些控件的話,你可以點(diǎn)選該控件 并使用"Delete"鍵進(jìn)行刪除。 注意,ASP.NET 移動(dòng) WEB 窗體的設(shè)計(jì)視圖并不是一個(gè)"可見即可得"的編輯 器,這是因?yàn)椴煌囊苿?dòng)設(shè)備其支持的呈現(xiàn)方式是不同的。例如,在設(shè)計(jì)視圖狀 態(tài)下通常一行只能放置一個(gè)控件,但是在某些設(shè)備上支持在同一行放置多個(gè)控 件,因此各個(gè)控件將會(huì)盡量地停靠在同一行上。正因?yàn)槿绱耍覀冞€需要注意 ASP.NET 移動(dòng) WEB 窗體并不支持控件的絕對(duì)位置。 在設(shè)計(jì)器中, 您可以按照希望控件顯示給用戶的順序?qū)⑺鼈兲砑拥酱绑w或面 板中,但是不能定義當(dāng)它們呈現(xiàn)在移動(dòng)設(shè)備的屏幕上時(shí)所處的絕對(duì)位置。為了適 應(yīng)多種多樣的移動(dòng)設(shè)備, ASP.NET 移動(dòng)設(shè)計(jì)器使您能夠針對(duì)特定設(shè)備自定義移動(dòng) Web 窗體頁和控件的外觀。這種靈活性使您可以確保:您的應(yīng)用程序在目標(biāo)設(shè)備 上具有適用且吸引人的外觀。 HTML 視圖 HTML 視圖狀態(tài)下顯示的是 HTML 源代碼,你可以采用直接編碼的方式設(shè)置移 動(dòng)控件和窗體的布局。當(dāng)然我們已經(jīng)很少使用這種方式進(jìn)行程序的開發(fā),你完全 可以在設(shè)計(jì)視圖狀態(tài)下設(shè)置移動(dòng)控件和窗體的布局,而后 Visual Studio 2005 會(huì)自動(dòng)生成相應(yīng)的頁面代碼。 你可以在 Visual Studio 2005 開發(fā)文檔窗體的底部選擇合適的標(biāo)簽進(jìn)行設(shè) 計(jì)視圖和 HTML 視圖的切換,如圖中箭頭所示:
代碼視圖 在采用代碼后置的方式下, 我們可以切換到代碼視圖狀態(tài)查看頁面程序的邏 輯代碼。你可以在頁面的空白出單擊右鍵,然后選擇"查看代碼"項(xiàng)就可以切換到 代碼視圖狀態(tài)。 ASP.NET 移動(dòng)控件的事件處理 和傳統(tǒng)的 ASP.NET 控件一樣,移動(dòng)控件也可以在特定的狀態(tài)下激發(fā)事件,并 提供了一些默認(rèn)事件來處理經(jīng)常發(fā)生的方案。除此之外,移動(dòng)控件也可以在某些 情況下激發(fā)一些其它的處理事件(非默認(rèn)的事件)。傳統(tǒng)的 ASP.NET 程序中,用戶 通過瀏覽器執(zhí)行某些操作時(shí)會(huì)激發(fā)相應(yīng)的事件, 移動(dòng)設(shè)備瀏覽器也采用了類似的 處理方式。我們可以將一個(gè)事件通過回發(fā)的方式傳遞到服務(wù)器端,繼而引發(fā)服務(wù) 器端對(duì)該事件的處理,最終的處理結(jié)果將以 HTML 的形式傳遞到客戶端瀏覽器。 處理一個(gè)由移動(dòng)控件激發(fā)的默認(rèn)事件是非常容易的, 我們只需在頁面中放置一個(gè) 移動(dòng)控件并雙擊該控件即可。下面為一個(gè)較常見的事件處理代碼,即一旦用戶單 擊命令按鈕就激發(fā)其 Click 事件。 protected void cmdGetCustomer_Click(object sender, EventArgs e) {……} 創(chuàng)建一個(gè)非默認(rèn)的事件處理器也是非常容易的, 我們現(xiàn)在無需考慮語言的相 關(guān)性。如果你曾經(jīng)使用過 Visual Studio 2003 的話,你會(huì)發(fā)現(xiàn)用 VB.NET 來處理 事件要比 C#復(fù)雜。在當(dāng)前的 Visual Studio 版本中已經(jīng)將這兩種語言的操作過 程進(jìn)行了統(tǒng)一,下面的步驟就是創(chuàng)建一個(gè)非默認(rèn)事件處理器的詳細(xì)步驟: 1. 在狀態(tài)視圖中點(diǎn)選要設(shè)置事件的控件。
2. 在屬性窗口中選擇事件按鈕,也就是那個(gè)帶有閃電標(biāo)記的按鈕。單擊后 就會(huì)在屬性窗體中顯示控件的所有的可用事件。 3. 雙擊你想處理事件的右側(cè)空白欄,這時(shí)將切換到相應(yīng)事件的代碼視圖狀 態(tài)。
使用容器控件 在 ASP.NET 移動(dòng) WEB 窗體中提供了兩種容器控件: Form 控件和 Panel 控件。 幾乎所有的移動(dòng)控件都是放置在這兩種控件之中,唯獨(dú) StyleSheet 控件例外。 StyleSheet 控件可以單獨(dú)地放置在頁面中,該控件將會(huì)在以后的小節(jié)中進(jìn)行詳 細(xì)的介紹。我們可以將屬于同一組功能的移動(dòng)控件都放置在一個(gè)容器控件中,這 樣使得程序的頁面結(jié)構(gòu)更加的清晰。 我們還可以為一個(gè)容器控件設(shè)置特定的樣式 表,所有位于該容器的移動(dòng)控件將會(huì)具有一致性的用戶體驗(yàn)。注意,在頁面中添 加的容器控件是沒有固定大小的, 因?yàn)樗鼘㈦S著你在其中放置的控件