L'affichage d'une image téléchargée dans MVC 3 Rasoir

Bien, ce débutant est en train de faire quelque chose de mal lors de l'affichage des images téléchargées sur le serveur:

modèle:

public class Person
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string ImageUrl { get; set; }
}   

contrôleur (upload - appelé par le [HttpPost] public ActionResult Créer):

public void Upload(Person person)
{
    var image = WebImage.GetImageFromRequest();
    var filename = Path.GetFileName(image.FileName);
    var path = Path.Combine(Server.MapPath("~/App_Data/Uploads/Fotos"), filename);
    image.Save(path);
    person.ImageUrl = Url.Content(Path.Combine("~/App_Data/Uploads/Fotos", filename));
}

create view:

...
@using (Html.BeginForm("Create", "Person", FormMethod.Post, new { @encType = "multipart/form-data" }))
{
    ...
    @FileUpload.GetHtml(initialNumberOfFiles: 1, allowMoreFilesToBeAdded: false, includeFormTag: false, uploadText: "image")
    ...
    <div>
        <input type="submit" value="Create" /> |
        @Html.ActionLink("Back", "Index")
    </div> 
}

Donc bon, l'image est téléchargé dans le dossier et l'url est enregistré

Maintenant, je veux le voir dans la Vue de Détail

vue de détail:

<div class="display-foto">
    <img src="@Url.Content(Server.MapPath(Model.ImageUrl))" alt="IMAGE" />                         
</div>

Affichage du code généré, tout semble bien se passer:

<img src="D:\Users\x\Documents\Visual Studio 2010\Projects\CMI_AD\CMI_AD\App_Data\Uploads\Fotos\_nofoto.jpg" alt="IMAGE" />

Mais le fait est que rien n'apparaît sur l'écran, sauf le texte "IMAGE".

Ce que je fais mal?

P. S. j'ai essayé sans le Serveur.MapPath, à l'aide de l'adresse relative "~\App_Data\Uploads\Fotos_nofoto.jpg" et le résultat est le même.

--- EDIT ---

@kmcc049: j'ai essayé ta suggestion de la création d'un helper

public static class MyHelpers
{
    public static IHtmlString MyImage(this HtmlHelper htmlHelper, string url)
    {
        var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
        var img = new TagBuilder("img");
        img.Attributes["alt"] = "[IMAGE]";
        img.Attributes["src"] = UrlHelper.GenerateContentUrl(url, htmlHelper.ViewContext.HttpContext);
        return MvcHtmlString.Create(img.ToString(TagRenderMode.SelfClosing));
    }
}

l'appel de l'avis:

@Html.MyImage(Model.ImageUrl)

le code généré est

<img alt="[IMAGE]" src="/App_Data/Uploads/Fotos/_nofoto.jpg" />

mais le résultat est le même: pas d'image 🙁

--- RÉSOLU ---

Apparemment le App_Data n'est pas un bon emplacement pour enregistrer les fichiers téléchargés car l'accès aux entraînera une Erreur 403 - Forbidden. J'ai déplacer les fichiers dans ~/Uploads/Fotos et il fonctionne.

la balise img est un disque dur d'url, et non pas un http ...

OriginalL'auteur Joao | 2011-09-06