如果現(xiàn)有的 ASP.NET 服務(wù)器控件都不符合應(yīng)用程序的特定要求,則可以創(chuàng)建封裝所需功能的 Web 用戶控件或 Web 自定義控件。這兩種控件之間的主要區(qū)別在于設(shè)計(jì)時(shí)的易創(chuàng)建性與易用性。
Web 用戶控件易于創(chuàng)建,但它們在高級方案中使用起來可能不太方便。開發(fā) Web 用戶控件的方式與開發(fā) Web 窗體頁的方式幾乎完全相同。與 Web 窗體相似,用戶控件可以在可視化設(shè)計(jì)器中創(chuàng)建,可以使用與 HTML 隔離的代碼來編寫,并且可以處理執(zhí)行事件。但是,由于 Web 用戶控件在運(yùn)行時(shí)動(dòng)態(tài)地進(jìn)行編譯,所以不能將它們添加到工具箱中,而且它們在添加到頁面上時(shí)由簡單的占位符標(biāo)志符號來表示。如果您習(xí)慣于完全的 Visual Studio .NET 設(shè)計(jì)時(shí)支持(包括“屬性”窗口和“設(shè)計(jì)”視圖預(yù)覽),這將會(huì)使 Web 用戶控件使用起來更不方便。此外,在應(yīng)用程序之間共享用戶控件的唯一方式是將一個(gè)單獨(dú)的副本放入每個(gè)應(yīng)用程序,因此如果對該控件作出了更改,將需要進(jìn)行比較多的維護(hù)。
Web 自定義控件是編譯的代碼,這使得 Web 自定義控件更易于使用但更難于創(chuàng)建;Web 自定義控件必須使用代碼來創(chuàng)建。一旦創(chuàng)建該控件,那么,您就可以將其添加到工具箱中,并在具有完全“屬性”窗口支持和 ASP.NET 服務(wù)器控件的其他所有設(shè)計(jì)時(shí)功能的可視化設(shè)計(jì)器中顯示該控件。此外,還可以在全局程序集緩存中安裝 Web 自定義控件的單個(gè)副本,并在應(yīng)用程序之間共享該副本,這將使維護(hù)變得更容易。有關(guān)更多信息,請參見全局程序集緩存。
如果您的控件包含大量靜態(tài)布局,用戶控件則可能是較佳的選擇。如果您的控件主要是動(dòng)態(tài)生成的(例如數(shù)據(jù)綁定表的行、樹視圖的節(jié)點(diǎn)或選項(xiàng)卡控件的選項(xiàng)卡),自定義控件則可能是較佳的選擇。
下表概述了這兩種類型之間的主要區(qū)別:
Web 用戶控件 | Web 自定義控件 |
---|---|
易于創(chuàng)建 | 難于創(chuàng)建 |
為使用可視化設(shè)計(jì)工具的使用者提供有限的支持 | 為使用者提供完全的可視化設(shè)計(jì)工具支持 |
每個(gè)應(yīng)用程序中需要控件的一個(gè)單獨(dú)副本 | 僅在全局程序集緩存中需要控件的單個(gè)副本 |
不能添加到 Visual Studio 中的工具箱 | 可以添加到 Visual Studio 中的工具箱 |
適用于靜態(tài)布局 | 適用于動(dòng)態(tài)布局 |