I am going to create a web server control representing a treeview. So I want to use 2 images for + and - for expand/collapse. How can I build this into the control in a way that can be used as image source when rendered on the page?
Since this will be in a compiled web controls library, I don't want to rely on external images in the web application.
Edit:
Based on this answer by Andre Kraemer I did the following:
In AssemblyInfo.vb:
<Assembly: System.Web.UI.WebResource("MyCompany.MyWebControls.Resources.plus.gif", "image/gif")>
<Assembly: System.Web.UI.WebResource("MyCompany.MyWebControls.Resources.minus.gif", "image/gif")>
In my RenderContents
override:
Dim lPlusImage As New WebControls.Image()
Dim lMinusImage As New WebControls.Image()
lPlusImage.ImageUrl = Page.ClientScript.GetWebResourceUrl(Me.GetType(), "MyCompany.MyWebControls.Resources.plus.gif")
lMinusImage.ImageUrl = Page.ClientScript.GetWebResourceUrl(Me.GetType(), "MyCompany.MyWebControls.Resources.minus.gif")
lPlusImage.RenderControl(output)
lMinusImage.RenderControl(output)
My Assembly name is MyWebControls
.
My Root Namespace is MyCompany.MyWebControls
.
The images plus.gif
and minus.gif
are located in a folder named Resources
, and the images have Build Action set to Embedded Resource.
It still does not work. I get no errors. I have tried the generated image url directly in the browser, bot nothing happens, just a blank page.
Note:
I tried to use an invalid path in the resource name, and the result was exactly the same, which made me wonder if I need to do something special to map the actual resource to the resource name. I got a 404 Not Found error only if I used different name in the code than what was specified in AssemblyInfo, it had nothing to do with path was pointing to an actual resource!
Edit:
I found the solution!
I found out that it is a difference between C# and VB. See my own answer to this question.