I’ve done this task before within repeaters and it has worked. However I can’t get the below to work for me in a normal webforms page. The images appear as broken links and breakpoints I put in the codebehind are not triggered.
(in the aspx file)
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl='<%# GetImageDirectory()%>btnRunReport.png' />
(codebehind)
public string GetImageDirectory()
{
return "~/App_Variants/LBSX/images/";
}
This is the second method I’ve tried, in the other one I tried passing the imagename through as a string, and it would return the entire link that way. Still no luck!
Any thoughts?
Thanks!
[EDIT] Thanks for the help everyone. In the end after the handy hints I found a recursive snippet which did the trick as follows:
private void UpdateImages(Control Parent)
{
foreach (Control c in Parent.Controls)
{
ImageButton i = c as ImageButton;
if (i != null)
{
i.ImageUrl = "~/App_Variants/LBSX/images/" + i.ImageUrl;
}
if (c.HasControls())
{
UpdateImages(c);
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
UpdateImages(Page);
...
Hope it helps someone else.
Cheers
First, just like Zachary mentioned, you’re using the code block for data binding.
Second, as you’ve already tried, using an inline expression (
<%= %>) won’t work either in your case, since you can’t use an inline expression for any property of a server-tag.What you could do instead is defining an image button using HTML syntax, omitting the
runat="server"tag, and use the inline expression to get your image’s URL:What an inline expression does is, it calls
Response.Write()with the value between<%= %>as the parameter, e.g.<%= this.MyVar %>isResponse.Write(this.MyVar).