為ASP.NET控制項加入捷徑功能表(1)

來源:互聯網
上載者:User
asp.net|菜單|控制項 為ASP.NET控制項加入捷徑功能表(1)
          雖然捷徑功能表在傳統型應用程式中已經是非常通用的元素,但是由於在象ASP.NET這樣的基於伺服器的技術沒有很好的描繪,所以在Web應用程式中捷徑功能表並不是很通用。要想使用捷徑功能表,瀏覽器必須高度支援DHTML和豐富事件模式,例如:Microsoft® Internet Explorer 5.0及更高版本,或者Netscape 6.0等。然而,各種瀏覽器的對象模式雖然功能上大至相同,但是成員各名字卻各不相同,這就需要我們自己實現對象和事件的從一種模式到到另一種模式的轉換。

這裡,我們建立一個針到Internet Explorer的對象模式的ASP.NET捷徑功能表。接著,我將經過修改使其功能支援其它瀏覽器。代碼支援ASP.NET 1.x,也可以在ASP.NET2.0 Beta1下編譯通過 Outline of the
ContextMenu Control 捷徑功能表控制項概述:
          MSDN Liabrary 中包含了幾個DHTML捷徑功能表的樣本。分別提供了對這一功能的不能實現方法。一個捷徑功能表就是在頁面中任何位置的一組標記代碼。它包括兩部分內容——介面和指令碼(當使用者在頁面右擊時關聯UI),UI提供一個可點擊的元素的列表——功能表項目——和各自的內容文本,表徵圖,命令名(command name),目標url,提示(tooltip),和所有你認為有必要顯示出來的東西。捷徑功能表介面是頁面的一部分,並且屬於頁面控制項樹中的一員。(太多的捷徑功能表將會出現執行的問題:與大多數使用者的常規情況相比,ASP.NET將發送更多的捷徑功能表到瀏覽器)當使用者在頁面的一個元素上右擊時,將引發一段JavaScript,這段指令碼將捷徑功能表移動到右擊的位置顯示。

          捷徑功能表將保持隱藏屬性,只有當使用者在頁面的一個綁定個捷徑功能表的元素上右擊時,捷徑功能表才顯示。頁面元素接收指令碼事件並彈出一個捷徑功能表作為響應。指令碼事件信賴於瀏覽器,在Internet Explorer 5.0和更新版本中是 OnContexMenu事件.在Netscape6.0和更新版本中你要使用 OnMouseUp 事件(在Internet Explorer 5.0+中你也可能使用OnMouseUp事件,但要多寫幾行代碼)在接收事件的指令碼中,擷取捷徑功能表的UI代碼塊並且將它移動到發生點擊的位置。同時設定彈出的panel的 visibilty屬性。當使用者在功能表項目上點擊時,頁面回傳並引發伺服器端事件。對於伺服器而言,點擊一個功能表項目和點擊一具常規的按鈕沒什麼區別。

當使用者戶想取消已經開啟的捷徑功能表時怎麼辦呢?在windows程式中,按下Esc鍵或者在菜單地區外點擊都可以取消已彈出的捷徑功能表。所以你必須在Web中實現這一功能。請注意,只有捷徑功能表處於活動(顯示出來)時,Esc鍵才有郊。因為Esc還可用於其它元素的其它鍵盤快速鍵。

我還可以讓菜單在使用者滑鼠移開菜單時隱藏。可以通過指令碼操作 OnMouseLeave 事件實現。
使用快顯功能表控制項
          假定我們已以設計出了這個快顯功能表(我們一會兒再說如何?這個捷徑功能表控制項),那麼如何使用它在ASP.NET頁面中添加一個或多個捷徑功能表呢?首先,在Visual Studio® .NET的工個欄中拖一個或多個捷徑功能表控制項到頁面上。然後,為每個菜單添加功能表項目,並配置每個功能表項目的的工具提示,命令名(command name)和其它所需的內容,例如快速鍵和說明主題的連結。命令名(command name)用於在響應點擊捷徑功能表發生頁面回傳時確定是哪一個功能表項目被點擊;對每一個捷徑功能表控制項執行個體的功能表項目集合它必須是唯一的。

          你必須在HTML標籤的OnContextMenu事件中加入代碼來彈出捷徑功能表,代碼必須信賴一系列的參數,象點擊的x,y座標,點擊的元素,和要使用的捷徑功能表的執行個體等。注意:如果必要你可以使用這種方式完全代替瀏覽器的捷徑功能表。綁定到OnContextMenu事件執行的JavaScript代碼是在運行時動態產生的。ContextMenu控制項將暴露一個集合屬性來包含分綁定捷徑功能表的控制項集合,在ContextMenu控制項將在運行時給這些要綁定的控制項一個 oncontextmenu 屬性。OK!完成!可以測試了。

          慢著,讓我們先來想一下ContexMenu控制項和頁中任意的顯示捷徑功能表的元素的綁定機制,這種機制對設計時的支援怎麼樣?理想的情況是:根據基類每一個Web控制項直接暴露一個 ContextMenuId屬性。然後在屬性視窗中選擇這個屬性時,將看到在頁面中的ContextMenu控制項的列表。當然這些ContextMenu控制項我們是已經建立了的;ContextMenuId屬性在ASP.NET 1.x中不支援,在將來的ASP.NET2.0中也不支援。

          在Visual Studio .NET 2003 整合式開發環境中,ASP.NET複合控制項可以很好的完成這一工作。可以通過使用類撰寫組合現有控制項來創作新控制項。複合控制項可呈現一個重新使用現有控制項功能的使用者介面。複合控制項可以從子控制項的屬性合成屬性並處理由子控制項引發的事件。它還可以公開自訂屬性和事件。

          我不選擇使用複合控制項有以下幾個原因:一個是Visual Studio .NET 2003對於Web表單中的控制項功能的擴充支援的不好(請參見:Extender provider components in ASP.NET: an IExtenderProvider implementation),第二,在Visual Studio 2005的ASP.NET設計器中不再支援組件托盤區。Web表單設計器現在僅支援ASP.NET控制項而忽略象複合控制項這樣的非可視化的組件。Visual Studio 2005將不再信賴InitializeComponent節,並且不再在代碼檔案中自動添任何工具產生(tool-generated)的代碼。ASP.NET控制項也不設計成具有捷徑功能表,所以要綁定捷徑功能表只能通過捷徑功能表控制項自身的執行。這裡我使用類似ASP.NET驗證控制項和被驗證控制項之間關聯的形式。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.