在MVC 3 Razor中显示上传的图片

9
好的,以下是您要翻译的内容:

嗯,这个新手在显示上传到服务器的图片时做错了一些事情:

模型:

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

控制器(upload - 由 [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));
}

创建视图:

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

目前为止,一切顺利,图片已上传到文件夹并保存了URL。

现在,我想在详细视图中看到它。

详细视图:

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

查看生成的代码,一切似乎都很正常:
<img src="D:\Users\x\Documents\Visual Studio 2010\Projects\CMI_AD\CMI_AD\App_Data\Uploads\Fotos\_nofoto.jpg" alt="IMAGE" />

但事实上,屏幕上除了文本“IMAGE”之外什么也没有显示。

我做错了什么?

P.S. 我尝试过不使用Server.MapPath,使用相对地址“~\App_Data\Uploads\Fotos_nofoto.jpg”,结果是一样的。

--- 编辑 ---

@kmcc049:我尝试了你的建议,创建了一个帮助程序

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

视图中的调用:

@Html.MyImage(Model.ImageUrl)

生成的代码是:
<img alt="[IMAGE]" src="/App_Data/Uploads/Fotos/_nofoto.jpg" />

但结果是一样的:没有图片 :(
--- 已解决 ---
显然,将上传的文件保存在App_Data中不是一个好的位置,因为访问它们会导致403错误-禁止。我将文件移动到~/Uploads/Fotos中,它就可以正常工作了。

img标签中的URL是硬盘地址,而不是HTTP地址... - Steve B
1个回答

3

1
另一种尝试:@{ var imgPath = UrlHelper.GenerateContentUrl(Model.ImageUrl, this.ViewContext.HttpContext); } <img src="@Url.Content(imgPath)" alt="[IMAGE]" /> 相同的结果:[IMAGE] - Joao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接