2009-11-19 63 views
10

是否有可能創建包含UserControls的類庫,以便我可以重用它們?如果是這樣,怎麼樣?是否使用.dll編譯標記?謝謝你的幫助!ASP.NET UserControl類庫

+0

@Mike C.添加了我的答案更新,檢查出來。 – eglasius 2009-11-27 17:05:17

回答

6

更新:我是對我的提示,使用預編譯的用戶控件,你會在用戶控件。

有關如何一步步,看到Turning an .ascx User Control into a Redistributable Custom Control

無需任何。ascx文件在您將使用它的項目中,所以這與您正在查找的內容完全匹配。


用戶控件並不意味着跨站點可以重複使用,使用custom server controls代替。

您可以使用現有控件撰寫服務器控件,並將其設置爲全部,以便您可以通過CSS進行樣式設置。

如果您仍然在使用用戶控制方法,請嘗試Bob在答案中提到的內容。我沒有使用用戶控件,但我希望能夠像使用自定義服務器控件一樣使用該方法的輸出。

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS.Controls"%> 
... 
<aspSample:WelcomeLabel Text="Hello" NameForAnonymousUser="Guest" 
    ID="WelcomeLabel1" runat="server" BackColor="Wheat" ForeColor="SaddleBrown" /> 

Ps。如果這不起作用,他提供的鏈接會告訴您無論如何都要複製ascx文件,這樣就不會出現您要查找的內容,例如,如果不遵守自定義服務器控件,請嘗試上述&。

+0

當然,你可以跨越多個頁面使用用戶控件 – CRice 2009-11-26 01:15:46

+0

@boon oops,意思是說跨站點 - 這已經清楚地給出了OP的問題;) – eglasius 2009-11-26 01:44:56

0

你可能會想看看Server Controls。 AFAIK您無法將用戶控件編譯爲單個DLL。

9

您可以編譯既UserControl S和Page s轉換類庫,因爲歸根結底,這是後您的網站是just in time編譯會發生什麼。該過程有一點涉及,因爲實際上UserControlPage不適用於跨應用程序。

從MSDN:

的用戶控件使您能夠創建可在多個地方進行控制的應用程序或組織

http://msdn.microsoft.com/en-us/library/system.windows.forms.usercontrol.aspx

的首選方法中使用的控制能力即將在各種應用程序中使用的方法是創建custom web server controls

如果你真的想與UserControl s到堅持,雖然,基本過程,以獲得此功能如下:

  1. 創建一個新的web application project
  2. 開發可重複使用UserControl s。
  3. 將網站發佈爲不可更新*網站。 (取消選中「允許此站點可更新」)
  4. 將編譯後的庫從bin目錄和ascx文件中根據需要從發佈站點複製到新站點。

    • 不可更新選項是將標記帶入程序集的東西。這是重要的一步。

是的,作爲點數四種狀態,你需要複製ASCX文件。該標記將包含在類庫中,並且ascx實際上將是空的。沒有辦法避免這種情況(除非你使用custom web server controls),因爲UserControls通過它們的文件名被添加到Pages。

所有這一切更詳細了,在MSDN文檔,

http://msdn.microsoft.com/en-us/library/aa479564.aspx

+0

我遵循了這些步驟,但是在將程序集集成到我的網站時遇到問題。我設置了「unupdateable」選項,並且在我的新項目中引用了.dll文件。我無法弄清楚如何在我的頁面上實際聲明它。 – 2009-11-19 21:31:42

+0

難道是我,還是這種方法仍然需要你部署標記.ascx文件? 「1.從內建的」 – Radu094 2009-11-23 16:12:46

+0

複製合適的.aspx/.ascx文件。您仍然需要物理文件,但它們將是空的。 – Bob 2009-11-23 16:31:41

0

如果我們在談論網絡形式,答案是否定的。標記(.ascx文件內容)不會編譯到dll中。 ASP.NET引擎希望在Web應用程序中查找文件系統中的該文件。所以不可能創建一個你可以簡單地重新分配或共享的DLL。

如果您想要創建可以跨Web應用程序共享的控件,您可以改爲創建自定義控件,但是必須在.net代碼中編寫HTML代碼(優先使用合適的類代替任務只是在文本中創建html),如果控件很大,可能會變得非常難看。

就我個人而言,我認爲這是非常煩人的。我認爲,如果你使用ASP.NET MVC,有一些可能性(取決於你的視圖引擎),但我沒有太多的MVC經驗。

+0

答案是不是,看看我的答案。 – Bob 2009-11-26 22:25:22

+0

@bob,你的答案不提供一個類庫(如在一個dll中)與嵌入式用戶控件,但一堆dll和各自的ascx文件。您仍然需要將這些文件放在目標Web應用程序中才能使用這些控件。所以這個問題的答案,就像它所表達的那樣,不是。 但是,您的答案可能是一個很好的選擇。 – Pete 2009-11-27 10:39:16

+0

文件內容確實被編譯到dll中。您需要ascx文件作爲佔位符。擁有多個DLL只取決於項目的結構。沒有理由不能合併爲一個。 – Bob 2009-11-27 13:53:42

0

這聽起來像自定義服務器控件是你在找什麼。

如果你的控件是其他服務器控件的組合(例如文本框和日期控件的按鈕),那麼你可以看看CompositeDataBoundControl和CompositeControl--這些是處理這種事情的方便方法。

但是,要注意,頁面循環/視圖狀態重新水合的工作方式很容易混淆。由於對它應該如何工作的細微誤解,我已經在這方面花費了相當多的時間。

http://aspnetresources.com/blog/composite_databound_control.aspx

0

您可以從一個DLL服務的用戶控件。你只需要創建一個自定義的VirtualPathProvider來加載控件。這基本上是SharePoint所做的。

下面是來自微軟的文章,介紹了該過程:

http://support.microsoft.com/kb/910441

您也可以「的VirtualPathProvider」做搜索。

本示例從數據庫加載代碼,但您可以對其進行修改以將程序集中的代碼作爲嵌入式資源加載。我們在我的公司這樣做是爲了跨許多網站和應用程序域共享一個母版頁。

然而,一個警告。這在中等信任環境中不起作用。因此,如果您計劃將其部署到共享主機環境,請確保對主機進行測試,以確定它是否會首先運行。