views:

91

answers:

2

Hi, 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

+2  A: 

Your syntax is for data binding, <%# %>. If you are just trying to do inline c#, you should use <%= %>.

Zachary
Actually I should have mentioned, I've tried that also and no luck still! Good point though, I did find various people saying that when I was searching forums etc.
Glinkot
+1  A: 

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:

<input type="image" src="<%= GetImageDirectory() %>btnRunReport.png" name="image" />

What an inline expression does is, it calls Response.Write() with the value between <%= %> as the parameter, e.g. <%= this.MyVar %> is Response.Write(this.MyVar).

Giu
Ok, thanks for that. What I'm trying to do is put a custom directory (depending on certain conditions) in front of the image name. So in one case it may be images3/picture.jpg and in others it would be images4/picture.jpg. I'm not using themes for various reasons. Is there any way in the codebehind I could achieve the same by doing something like:First, set imageURL at designtime to 'picture.jpg' without pathThen for each Imagebutton in (whatever the page object is)ImageUrl = "mydirectory" + existing imageurlWould that be workable do you think?Thanks for your time!
Glinkot
Thanks to your guidance I've now managed to solve this. Ended up iterating through the controls as mentioned and putting the path at the front. Works a charm! I will add code to the question for others reference.
Glinkot
I'm glad you could solve this. I've managed to write the code for iterating through the controls; if somebody's interested, you can find the mentioned code here: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27788#a27788
Giu
Thanks for that, much appreciated mate. Note that the one I put above is recursive whereas yours seems to be nested to two levels. Not sure if it ever goes below two levels, mind you... :)
Glinkot