Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

substitute img when EVAL file name is not found

0 views
Skip to first unread message

Keith G Hicks

unread,
Apr 30, 2008, 7:38:03 PM4/30/08
to
I'm hoping there's a simple way to do this. I need to show a dummy image in
an asp image object if the file is missing. Here's my asp.net 2.0 markup:

<asp:Image ID="imgGrad" runat="server" BorderColor="DimGray"
BorderStyle="Solid" BorderWidth="1px" Height="120px" ImageUrl='<%#
"~/Images/ClassmatePics/" & Eval("GradPhotoFileName") %>' ToolTip="Click to
enlarge" /></td>


"GradPhotoFileName" is stored in a field in a table. If the file name stored
in the table is "JeffJones.jpg" but there is no "JeffJones.jpg" file in the
"~/Images/ClassmatePics/" folder then I have a dummy jpg image that I want
to show ("MissingPhoto.jpg").

I'm hoping there's an easy way to do that maybe in the EVAL code but I don't
know how. Can someone help me out?

Thanks,

Keith


Peter Bromberg [C# MVP]

unread,
Apr 30, 2008, 7:49:37 PM4/30/08
to
Probably the easiest way is to call a protected method that accepts type
object (e.g., Eval("GradPhotoFileName") ) -- and returns the proper string
url to the image, or the alternate image url.
--Peter
"Keith G Hicks" <k...@comcast.net> wrote in message
news:eZP7Atxq...@TK2MSFTNGP05.phx.gbl...

Keith G Hicks

unread,
Apr 30, 2008, 8:36:06 PM4/30/08
to
I appreciate the hint but being pretty new to all of this (asp.net) I have
no idea how to go about doing that. I'm fine with VB and can create subs and
functions just fine so if that's what you mean I can do that part I guess
but implementing it in my markup below is not remotely clear to me. I need
as much help as possible.

THanks,

Keith

"Peter Bromberg [C# MVP]" <pbro...@nospammaam.yahoo.com> wrote in message
news:30141463-D7AF-4A95...@microsoft.com...

S.M. Altaf [MVP]

unread,
May 1, 2008, 2:25:54 AM5/1/08
to
Do this from the codebehind. You have the value of "GradPhotoFileName", you
can check if System.Io.File.Exists() and if it doesn't, set the .ImageUrl
property of your imgGrad image to your dummy image URL. I do not know how
you're binding your image to the data though, but how you assign the values
in the codebehind will depend on the method you're using.

--
---------------------------------------------------
S.M. Altaf [MVP]
http://www.mendhak.com/


"Keith G Hicks" <k...@comcast.net> wrote in message

news:#maMeNyq...@TK2MSFTNGP04.phx.gbl...

Keith G Hicks

unread,
May 1, 2008, 8:33:04 AM5/1/08
to
Here's what I've done so far:

The following markup for an asp:image is in an aspx file in my root folder:

<asp:Image runat="server" ID="imgGradLarge" ImageUrl='<%#
imageFileToDisplay("~/Images/ClassmatePics/", val("GradPhotoFileName"))
%>'></asp:Image>

This VB.net code is in my App_Code folder in a file caled MyUtils.vb

Public Shared Function imageFileToDisplay(ByVal imageFilePath As String,
ByVal imageFileName As String) As String
If System.IO.File.Exists(imageFilePath & "/" & imageFileName) Then
imageFileToDisplay = imageFilePath & "/" & imageFileName
Else
imageFileToDisplay = imageFilePath & "/NoClassmatePic.jpg"
End If
End Function

I'm sure there's more wrong that I am not aware of but for starters I get
this error:

Compiler Error Message: BC30451: Name 'imageFileToDisplay' is not declared.

If you are tempted to respond with "You need to declare
'imageFileToDisplay'" then please don't respond. I need to know HOW to do
that in the aspx markup. I haven't found anything that explains how to do
that.

If you see anything else I need to correct, please feel free to be as
specific as possible.

I really need specific coding help. I'm a bit lost on this right now. Pseudo
code suggestions are not what I'm looking for. I need someone to either show
me (I'm still learning) how to corrrect the above code or at least point me
to a website that expains (with actual example code) how to do what I'm
trying to do.

Keith

"Keith G Hicks" <k...@comcast.net> wrote in message
news:eZP7Atxq...@TK2MSFTNGP05.phx.gbl...

Keith G Hicks

unread,
May 1, 2008, 9:02:43 AM5/1/08
to
Ok, I moved my function into the codebehind file for the page as follows:

Protected Function imageFileToDisplay(ByVal imageFilePath As String,


ByVal imageFileName As String) As String

If File.Exists(ResolveUrl(imageFilePath) & imageFileName) Then
imageFileToDisplay = imageFilePath & imageFileName
Else
imageFileToDisplay = imageFilePath & "NoClassmatePic.jpg"
End If
End Function

and it runs without errors. The problem is that the
ResolveUrl(imageFilePath) only returns part of the path like this:

/mysite/...

but I need

C:\Inetpub\wwwroot\mysite\......

What vb.net function will give me this?

Keith


"Keith G Hicks" <k...@comcast.net> wrote in message

news:eI3NFe4...@TK2MSFTNGP02.phx.gbl...

David

unread,
May 1, 2008, 9:02:25 AM5/1/08
to
Hhhmmmm....

Not sure, but if your markup is calling imageFileToDisplay, then you should
be able to change both of the imageFileToDisplay in your IF and ELSE
statements to return... i.e.

return imageFilePath & "/NoClassmatePic.jpg"


--
Best regards,
Dave Colliver.
http://www.AshfieldFOCUS.com
~~
http://www.FOCUSPortals.com - Local franchises available


"Keith G Hicks" <k...@comcast.net> wrote in message

news:eI3NFe4...@TK2MSFTNGP02.phx.gbl...

David

unread,
May 1, 2008, 9:58:52 AM5/1/08
to
I have never used resolveurl, so not sure what it does. However, you should
probably look at Server.MapPath instead of resolveurl.


--
Best regards,
Dave Colliver.
http://www.AshfieldFOCUS.com
~~
http://www.FOCUSPortals.com - Local franchises available

"Keith G Hicks" <k...@comcast.net> wrote in message

news:erfrou4q...@TK2MSFTNGP02.phx.gbl...

Keith G Hicks

unread,
May 1, 2008, 11:14:13 AM5/1/08
to
Well I got it working. So for anyone who ever has a similar question here's
what I ended up doing:

My code behind function is as follows (with Imports System.IO at the top of
the file):

Protected Function imageFileToDisplay(ByVal imageFileName As String) As
String
If File.Exists(System.AppDomain.CurrentDomain.BaseDirectory &
"Images\ClassmatePics\" & imageFileName) Then
imageFileToDisplay = "~/Images/ClassmatePics/" & imageFileName
Else
imageFileToDisplay = "~/Images/ClassmatePics/NoClassmatePic.jpg"
End If
End Function

System.AppDomain.CurrentDomain.BaseDirectory is getting the entire path of
the site's root (C:\Inetpub\wwwroot\mySite for example). I suppose I could
have passed the path from the aspx file to the code behind but it's 6 of
one, 1/2 dozen of the other IMO. I didn't use ResolveURL because that
doesn't give the the whole base path.

My markup in the aspx page is as follows:

<asp:Image ID="imgGrad" runat="server" BorderColor="DarkGray"
BorderStyle="Solid" BorderWidth="1px" Height="130px" ImageUrl='<%#
imageFileToDisplay(Eval("GradPhotoFileName")) %>' ToolTip="Click to enlarge"
/>

it all works perfectly fine.

Keith


Peter Bromberg [C# MVP]

unread,
May 1, 2008, 2:18:50 PM5/1/08
to
Probably Server.MapPath("relativepathtoimage") would do the trick for you.
Peter

"Keith G Hicks" <k...@comcast.net> wrote in message

news:eQdnK45q...@TK2MSFTNGP06.phx.gbl...

Fernando Rodriguez, MCP

unread,
May 1, 2008, 2:57:23 PM5/1/08
to
Actually the easiest and most efficient way is to do it with javascript on
the client side, just do this on your Page_Load routine:

imgGrad.Attributes("onerror") = "this.src='<dummy image relative path>;'"

That will cause the user's browser to load the dummy image if it doesn't
find the original.

Hope that helps,
Fernando Rodriguez, MCP


"S.M. Altaf [MVP]" <sma...@omgplzdntspammekthxbaimsn.com> wrote in message
news:3F211D0B-3873-4089...@microsoft.com...

0 new messages