2009-11-18 10 views
11

Ceci est en quelque sorte lié à une autre question que j'ai posée mais je me demande pourquoi ne pas le demander séparément.Comment fonctionne Url.Action Asp.net MVC?

Si je devais placer quelque chose comme ce qui suit dans une vue

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

Est-il censé afficher cela?

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

Ou serait la valeur de l'attribut src-fait être remplacé par les résultats du UserController GetImage action?

Répondre

9

Il va construire le chemin de l'action, en retournant un URL, pas les résultats de l'exécution de l'action.

Les résultats seront:

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

code exemple. suppose que votre modèle d'utilisateur a l'image stockée dans un tableau d'octets. Si vous utilisez LINQ et que la propriété est Binary, utilisez la méthode ToArray() pour la convertir en tableau d'octets. Notez les attributs qui nécessiteront que l'utilisateur soit connecté et utilise une requête GET.

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

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

}

+0

Merci. Seriez-vous capable de savoir comment les images sont censées être affichées en utilisant cette méthode? Chaque exemple que j'ai vu pour afficher des images utilise cette méthode et je ne comprends pas comment cela fonctionnerait (puisque cela ne fonctionne pas pour moi). Je suis nouveau à MVC alors cela aiderait vraiment. – zSynopsis

+0

Vous auriez besoin d'une méthode appelée DisplayImage (ou GetImage, vous l'avez dans les deux sens, mais un seul pourrait être correct) qui prend l'id de l'utilisateur en tant que paramètre. Il aurait besoin de renvoyer un ContentResult avec le type mime approprié pour le format de l'image, par exemple image/jpeg, image/gif ou image/png. Votre action extraira l'image de la base de données dans un flux et construira le ContentResult à partir de ce flux, en définissant le type mime. – tvanfosson

+0

Merci tvan. Existe-t-il des exemples sur la façon de construire un ContentResult pour une image stockée dans un tableau d'octets? – zSynopsis