Mostrando uma imagem carregada no MVC 3 Razor

9

Bem, esse novato está fazendo algo errado ao exibir imagens enviadas para o servidor:

modelo:

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

controller (upload - chamado pelo [HttpPost] public ActionResult Create):

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));
}

criar visualização:

...
@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> 
}

Até agora, tudo bem, a imagem é enviada para a pasta e o URL é salvo

Agora, quero vê-lo na Visualização detalhada

vista detalhada:

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

Visualizando o código gerado, tudo parece estar bem:

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

Mas o fato é que nada aparece na tela, exceto o texto "IMAGE".

O que estou fazendo de errado?

P.S. Eu tentei sem o Server.MapPath, usando o endereço relativo "~ \ App_Data \ Uploads \ Fotos_nofoto.jpg" e o resultado é o mesmo.

--- EDIT ---

@ kmcc049: tentei sua sugestão para criar um ajudante

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));
    }
}

a chamada na exibição:

@Html.MyImage(Model.ImageUrl)

o código gerado é

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

mas o resultado é o mesmo: sem imagem: (

--- RESOLVIDO ---

Aparentemente, o App_Data não é um bom local para salvar arquivos enviados porque o acesso a eles resultará em um Erro 403 - Proibido. Eu movo os arquivos para ~ / Uploads / Fotos e funciona.

    
por Joao 06.09.2011 в 16:15
fonte

1 resposta

3

Esse não é um caminho HTTP válido. Esse é o caminho para a pasta no seu computador.

tente o método UrlHelper.GenerateContentUrl() link

    
por kmcc049 06.09.2011 / 16:24
fonte