Marc Gusmano
在從一個Web頁面轉換到另一個Web頁面時,你的ASP.NET應用程式的使用者介面的某些部分常常是保持不變的——如某些“裝飾”的部分:頁首處的GIF圖片、水平工具條或導航條、左側的連結、等等。你可以繼續用它們,而不必為每個頁面重建。
在過去,一個流行的ASP技術就是為一個頁面的每個主要部分建立一個include檔案,然後建一個整體的HTML表,表的單元包含每個include檔案。這種方法是可行的,但是不美觀,還容易出錯。幸運的是,ASP.NET可以讓你用一種更好的方法來解決這個問題,運用一個Visual Studio .NET PlaceHolder Web控制項。該控制項將其它控制項作為一個集合(collection)包含起來。你可以在運行時清除那個collection或添加它;例如,你可以在運行時添加一個Web使用者控制項(一個模組式的Web頁面)。我將講述如何將PlaceHolder Web控制項同Web使用者控制項結合起來運用,為構建ASP.NET應用程式提供一個方法。
首先在VS.NET中建立一個新的ASP.NET Web應用程式。我在範例代碼中用的是C#。建立一個Web表單,儲存的檔案帶有ASPX副檔名。我稱其為我的main.aspx。該頁面是你的應用程式中唯一的Web頁面,因為你用Web使用者控制項(ASCX檔案)來開發所有的頁面“內容”。
在main.aspx頁面中建立你選擇的網站裝飾內容。在你想放置網站豐富內容地方添加一個PlaceHolder控制項。然後,將下面的代碼添加到你的頁面的Page Load事件中:
private void Page_Load(object sender, System.EventArgs e) { string p = Request.QueryString.Get("p"); PlaceHolder1.Controls.Clear(); if (p == null) PlaceHolder1.Controls.Add(LoadControl ("modules/" + "Default" + ".ascx")); else { PlaceHolder1.Controls.Add(LoadControl ("modules/" + p + ".ascx")); } } |
通過該代碼,你可以在項目模組檔案夾中看到一個包含Web使用者控制項頁面(ASCX)的名字的查詢字串參數p。你不用將所有ASCX檔案都放在一個單獨的檔案夾中,但這麼做的確可以進一步隔離應用程式。
一旦你得到那個字串後,清空PlaceHolder的Controls集合,清除你在先前可能顯示的任何ASCX。然後,查看一下代碼,看你是否需要載入一個預設的ASCX。最後,如果p查詢字串是請求的一部分,那麼由p查詢字串代表的頁面就被載入了。
你不需要費很大的勁構建代碼來在你的網站上顯示多個Web頁面。在你的VS.NET項目中添加一個新的Web使用者控制項頁面。一旦你添加了這個頁面,你就可以把它當作你的應用程式中的唯一的頁面來設計並編寫代碼了;你甚至不需要知道它將在main.aspx頁面中運行。當然,如果該頁面需要與首頁面互動,情況並沒有這麼簡單,但在這裡我並不打算講述這個問題。
圖1." src="http://www.fawcette.com/China/VS/2002_10/PlaceHolder/Image/fig1sm.gif" align="left"> |
圖1. 保持你的Web GUIs的恒量元素 |
設想你需要在VS.NET開發環境中顯示一個Account Logon使用者控制項(見圖1)。代碼只給開發人員提供與該頁面細節相關的UI。沒有辦法改變整體頁面的其它方面。
現在,當你在一個瀏覽器中運行http://localhost/CSCSdotNET/main.aspx時,首先載入了default.ascx頁面,這是由於main.aspx的Page Load事件的緣故。要導航到Login頁面,你只需將一個p查詢字串參數添加到請求——在這個例子中,運用URL http://localhost/CSCSdotNET/main.aspx?p=01-AccountLogon。現在顯示的就是整個main.aspx頁面,以及你在圖1中看到的動態載入的01-AccountLogon.ascs Web使用者控制項。