substitute img when EVAL file name is not found

  • Thread starter Thread starter Keith G Hicks
  • Start date Start date
K

Keith G Hicks

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
 
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
 
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
 
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.
 
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
 
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
 
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
 
Probably Server.MapPath("relativepathtoimage") would do the trick for you.
Peter
 
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
 
Back
Top