2012-02-09 77 views
3

我目前正在嘗試在asp.net c#中創建自定義服務器控件,並使用VS2010。自定義服務器控件和圖像處理

我想創建一個自定義服務器控件,可以直接將圖像加載到單獨的Web項目中。例如。自定義服務器控制和一個單獨的Web項目,我可以用最少的安裝和配置將控件拖放到它上面。重要的是它可以在其他Web項目的任何地方使用。

我已經創建了一個基本的自定義控件,但我需要能夠直接通過自定義服務器控件加載圖像並將它們顯示在我單獨的Web項目中。圖像將暫時來自靜態位置。

所以基本上我有一個圖像,我想加載並將該圖像傳遞到控件中,然後將其顯示在自定義控件所在的網頁上。我調查了圖像處理程序,並有單獨的通用處理程序,但沒有任何運氣。

圖像位置 - >自定義控件 - >網頁顯示已傳遞到自定義控件的圖像。

任何人都有任何想法如何做到這一點,或去做這件事?

UPDATE:

我很抱歉,我是不夠清楚第一次輪。

我有兩個項目,一個自定義控件項目和一個asp.net網站項目。第一個項目(自定義控件)從Web服務中獲取一個字節流並將其轉換爲一個Image對象。在這一點上,我希望控件將該圖像添加到網站的網頁中。自定義控件隨後在asp.net網站上註冊,並且我添加的控件呈現給頁面。不過,我想渲染從緩衝區中恢復的圖像,然後將其轉換爲本地文件到網頁上。

我沒有問題從字節流中獲取圖像,並將圖像存儲在目錄中。我遇到的問題是,我想讓圖像在網頁上呈現,而不是先將圖像存儲在網絡項目中。我曾考慮將圖像存儲在Web目錄中,因此當我運行該項目時,我可以將圖像url設置爲localhost/images/myimagefrombystream.jpg,但我不確定這是否是正確的方法。

任何想法?

+0

我要添加一些更多的細節,使其更清晰。 – RiggleBits 2012-02-09 14:40:50

回答

1

我們有一個服務器控件庫其中包含一些可在多個其他Web項目中重複使用的圖像。

我們採取的方法是將每個圖像構建操作標記爲嵌入式資源。然後在程序集信息文件中,我們有一個像線以下:

[assembly: WebResource("AssemblyName.SubDirectory.ImageName.png", "image/png")] 

其中的AssemblyName是實際的項目名稱,子目錄是在項目目錄中的圖像(S)位於等

該項目也發佈CSS文件;這也是嵌入式資源。在CSS文件是指這些圖像使用:

.someImage { 
    height: 85px; 
    background-image: url(<%=WebResource("AssemblyName.SubDirectory.Image.png") %>); 
    background-repeat: repeat-x; 
    margin: 0px; 
    padding: 0px; 
} 

在類的代碼中,我們將把這些CSS文件,如:

HtmlLink cssLink = new HtmlLink(); 
cssLink.Href = Page.ClientScript.GetWebResourceUrl(this.GetType(), "AssemblyName.css.SomeCssFile.css"); 
cssLink.Attributes.Add("rel", "stylesheet"); 
cssLink.Attributes.Add("type", "text/css"); 

,我們可以很容易地引用圖片直接使用的東西像上面那樣。

在這一點上,該組件是100%便攜式。所有的CSS文件和所需的圖像都嵌入到其中,因此您不必擔心調用應用程序是否具有相同的圖像。

順便說一句,這是一些控制供應商如何做的事情;至少是better ones

+0

這就是我一直在尋找的東西。感謝您的幫助,非常感謝。 – RiggleBits 2012-02-15 09:14:32

0

我不知道爲什麼你會變得複雜。簡單地說,將ImageUrl屬性(非公共字段)添加到您的自定義控件,期望您的控件的客戶端代碼設置它,如果不爲空,則在CreateChildControls中添加一個Image控件到控件樹。或者,將圖像始終添加到控制樹中,但要使其在該屬性的setter(或您認爲合適的其他位置)內可見/不可見。我不明白你說的與你預想的解決方案有關的一半,說實話 - 所以,我希望我沒有錯過這裏的主題:)

-1

我假設你已經在一個類中創建了這個自定義控件圖書館。的圖像源是靜態的(一些固定的基本url),並且只是該圖像名稱發生更改,您可以使用自定義ImageUrl作爲src屬性來公開ImageUrl屬性(字符串)並根據屬性呈現標記(全部可以是默認值)標籤。

希望有幫助!

+1

請讓我知道投票的理由,以便我可以提供更好的答案。只是向下投票沒有幫助! – Digvijay 2012-02-09 14:22:59

0

我不確定我是否理解這個問題,但仍然讓我試試。 據我瞭解,你有兩個項目,一個你想上傳一個圖像到一個特定的位置,另一個你想顯示該圖像。 我只是在第一個應用程序中有一個文件上傳控件,並使用它將圖像上傳到所需的位置。 在其他應用程序中,您可以使用通用處理程序。該處理器可以通過查詢字符串參數從第1個應用程序中獲得的圖像文件名,那麼它會在磁盤上找到的圖像,並返回一個適當的頭一個反應,例如:

response.ContentType = "image/jpeg"; 
response.OutputStream.Write(image, 0, (int)request.InputStream.Length); 
response.Flush(); 
response.End(); 
+0

我已經更新了我的原始問題,以便更清楚一點。 – RiggleBits 2012-02-14 22:59:59