How does Url.Action work Asp.net MVC?
Asked Answered
P

1

12

This is somewhat related to another question I've asked but I figure why not ask it seperately.

If I were to place something like the following in a view

<td><img src='<%= Url.Action( "DisplayImage" , "User" , new { id = item.id} ) %>' alt="" /></td>

Is it supposed to display this?

<td>
   <img src='/User.mvc/DisplayImage?id=U00915441' alt="" />
</td>

Or would the value of the src-attribute actually be replaced with the results of the UserController GetImage Action?

Pantheon answered 18/11, 2009 at 21:25 Comment(0)
U
9

It will construct the path to the action, returning a url, not the results of executing the action.

The results will be:

<td>
   <img src='/User.mvc/DisplayImage?id=U00915441' alt="" />
</td>

Example code. assumes your user model has the image stored in a byte array. If you are using LINQ and the property is a Binary, then use the ToArray() method to convert it to a byte array. Note the attributes which will require that the user be logged in and using a GET request.

[Authorize]
[AcceptVerbs( HttpVerbs.Get )]
public ActionResult DisplayImage( string id )
{
     var user = ...get user from database...

     return File( user.Image, "image/jpeg" );
}

}

Unorganized answered 18/11, 2009 at 21:34 Comment(5)
Thanks. Would you happen know how images are supposed to be displayed using this method? Every example i've seen for displaying images uses this method and i don't understand how it would work (since it is not working for me). I'm new to mvc so this would really help.Pantheon
You would need a method called DisplayImage (or GetImage, you have it both ways but only one could be correct) that takes the user's id as a parameter. It would need to return a ContentResult with the appropriate mime type for the image format, say image/jpeg, image/gif, or image/png. Your action would retrieve the image from the database into a stream and construct the ContentResult from this stream, setting the mime type.Unorganized
Thanks tvan. Are there any examples on how to go about constructing a ContentResult for an image stored in a byte array?Pantheon
Now that I think about it you probably want a FileContentResult. Will update with some code.Unorganized
@Steven - you'll incur some extra processing and time in retrieving the data from the database, but I would image that constructing the file result is comparable to simply serving up the file off disk. You could also use a hybrid approach where the file's path is stored in the DB and you serve up the file from disk. There would be less data being retrieved from the DB so it might be faster.Unorganized

© 2022 - 2024 — McMap. All rights reserved.