Microsoft的.NET版本能夠使你在一組非常寬泛的平臺上開發和部署你的應用程序。比如,你可以通過ASP.NET的mobile控件(以前被稱為Microsoft Mobile Internet Toolkit)在智能電話(smartphone)及其他小屏幕設備上部署你的Web應用程序。為了同.NET的策略保持一致,ASP.NET mobile控件試圖將設備的差異隱藏起來并使你專著于你的商務邏輯。我將講解如何將一個簡單的應用程序從ASP.NET轉化到mobile ASP.NET中去,以及需要進行哪些改變來使應用程序適合于mobile Web。
我構建了一個能夠對上中西部地區(upper Midwest)的一些所選城市進行天氣預報的簡單Web應用程序,我們將對它進行轉換。這些用于天氣預報的數據是完全隨機的。(使用隨機的天氣預報和當地的真實預報情況一樣準確。我們剛剛在兩天之內從一個溫度高達65度的地方來到有六英尺積雪的地方。)我將向你介紹這個程序的設計情況以便使你了解如何對你自己的程序進行改進。該程序包括兩個VS.NET項目――WeatherLib和 WeatherSite。WeatherLib中包含中間層邏輯。你可以創建一個Forecast對象并通過索引器(indexer)來讀取預報數據。這個程序在form中是通過ASP.NET Repeater控件來讀取未來10天的天氣預報數據的,其中DataBinder.Eval()方法用于為描述每個預報元素的屬性返回一個格式編排好的字符串。
現在你就可以將這個程序轉化為ASP.NET mobile控件了。在轉化的過程中,我將存在于WeatherLib的中間層和存在于WeatherSite的顯示層分開了,雖然這只是一個很小的例子。你也應該在你的程序中進行同樣的處理。我還沒有讓你看到代碼分離類(code-behind class)中的代碼,因為那里還沒有寫什么代碼。代碼分離類用于創建中間層對象以及對它們的屬性進行查詢。
你可能會采用將移動用戶導向不同網站的策略。通過VS.NET向導來創建一個新的項目,在C#一欄下選擇"ASP.NET Mobile Web Application"。VS.NET會新建一個帶有單一頁面的程序,就和通常的ASP.NET程序完全一樣。但生成的文件是有一些差別的。首先,web.config中會包括兩個新的區域(section)――MobileControls和DeviceFilters。MobileControls中包含一個Key來支持cookieless數據目錄。這個設置說明目錄內容會被存儲到一個query string中以使session及驗證過程能夠在移動設備中正常運行。deviceFilters區域比較大,它用于為ASP.NET提供一些功能來創建特定設備的內容。如果你有特定設備的內容,你就必須添加或修改這個區域。在大多數情況下,該區域的缺省設置已經足夠用了。
接下來的兩處不同位于ASPX頁面以及用于頁面的代碼分離器中。它們都引用了System.Web.UI.MobileControls命名空間,而不是System.Web.UI.Controls命名空間。兩個命名空間的相似之處會對你在新的領域中提高ASP.NET技巧有所幫助。
在完成向導之后,你必須在這個新的項目中實現你自己的顯示層,包括引用WeatherLib項目以便使新的mobile Web項目能夠訪問共享的中間層。然后,開始添加這個mobile控件使用戶可以選取和瀏覽他們所選的天氣預報情況。在form中放置一個下拉列表框好讓用戶選擇他們想要的城市。添加一個按鈕來加載新城市的天氣預報。然后,下拉ObjectList控件來顯示該預報。
封裝ObjectList 剩下需要做的事就是將ObjectList封裝起來以便看到form中的天氣預報。ASP.NET中的ObjectList似乎是Repeater和DataGrid類的混合體。它包含一個概要視圖和一個詳細視圖。概要視圖用于顯示列表中每個值的一個屬性;詳細視圖則會顯示列表中一個索引的所有字段。你可以用不同的視圖來保存屏幕空間。在這個程序中,你將顯示每種天氣預報的日期,使用戶能夠選取他們最感興趣的那一天的數據。他們能夠通過點擊日期來查看該天的詳細信息。在代碼中,你需要用labelField屬性來指定用于概要視圖的每個數據元素所在字段。
Field元素用于指定詳細列表中字段的映射值。你必須手動添加這些代碼,因為ObjectList控件不支持在VS.NET屬性窗口中添加這些字段。注意在VS.NET 2003最終beta版的文檔中包含兩個錯誤。它將DataFormatString屬性作為FormatString列出了,而且如果你指定自己的格式和字段映射,則AutoGenerateFields一定會失敗;另外,顯示的每個字段中會出現兩個相同的值。
修改好頁面之后,你要在代碼分離類中的Page_Load事件處理中添加代碼來創建Forecast對象并將它綁定到ObjectList中:forecaster = new WeatherForecast (City);
ForecastDisplay.DataSource = forecaster; if (!IsPostBack) ForecastDisplay.DataBind ();
一旦你在ASPX頁面和代碼分離類中添加了這些項目之后,你就可以在瀏覽器中看到這個頁面了。你已經將你的程序移植到mobile Web中了。
移植到mobile控件和在一個真實的移動設備中測試你的網站兩回事。或許你有一個很不錯的網站,但是在你處理移動電話的form factor和大小時,你得到的卻是一個不那么有用的程序。Microsoft Mobile Explorer (MME) Emulator能夠幫你找到這些問題。該測試還不能完全確保你的程序能夠運行于所有可能的設備中,尤其不能擔保你所創建的指定設備的內容。你可以把它當作對電話form factor的一個底線測試。
在下載并安裝了這個仿真程序之后,你必須將它配置到你的項目中。通過兩個步驟將它添加到VS.NET環境中。首先,將MME添加到瀏覽器列表中。你可以通過File | Browse With?command,選擇Add按鈕并將它導航到MME瀏覽器中。它會被缺省安裝到%Program Files%\Microsoft Mobile Explorer\ 3.0\Emulator\mmeemu.exe文件中。即便在你安裝好之后,你的程序還是會將IE作為缺省瀏覽器。因此第二步,你必須對該項目的屬性進行編輯。右擊Solution Explorer 中的項目節點并選中Properties,選擇Debugging節點并將"Always Use Internet Explorer"設置為False。現在當你啟動程序時,它就會顯示在Mobile Explorer Emulator 中了。
通過這個簡單的ASP.NET mobile控件介紹,你大概已經了解如何將ASP.NET程序移植到mobile Web中了,它能夠適用于所有用戶。關鍵問題是你提高了現有的ASP.NET知識,因為其架構都是相同的;只是一些控件稍有差別。你可以通過將商務邏輯層同顯示層分離來減少轉向到移動設備的代碼量。否則mobile控件就會和一般的ASP.NET控件一樣了。如果你對ASP.NET程序很熟的話,
|