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

2023-11-27

好吧,这个新手在显示上传到服务器的图像时犯了一些错误:

model:

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

控制器(上传 - 由 [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> 
}

到目前为止,一切顺利,图像已上传到文件夹并保存了网址

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

详细视图:

<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”之外,屏幕上什么也没有出现。

我究竟做错了什么?

附:我尝试过不使用 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 并且它有效。


这不是有效的 HTTP 路径。这是您计算机上文件夹的路径。

try the UrlHelper.GenerateContentUrl()方法代替http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.generatecontenturl.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MVC 3 Razor 中显示上传的图像 的相关文章

随机推荐

  • Git合并忽略空格[重复]

    这个问题在这里已经有答案了 可能的重复 git 空格问题 我怎样才能设置不报告纯粹由于合并时的空格而导致的冲突 如下所示 lt lt lt lt lt lt lt HEAD open RESDBFILE lt this day result
  • SCTP 和 webrtc

    我看到 SCTP 将用于从 Chrome 31 开始的数据通道 并且根据这个 google group thread 基于 RTP 的正式通道有时将在 2014 年 2 月被弃用 https groups google com forum
  • 如何使用 etrace 和动态库来按时间顺序跟踪 C++ 中的函数调用?

    背景 我有一个大型模拟工具 我需要了解它的逻辑行为 为了做到这一点 如果我有函数调用的时间顺序 我会得到最多的帮助 作为一个最小的工作示例 我在网上找到了很多工具 比如Cyg分析器 and etrace 我在寻找解决方案时变得非常痛苦 以至
  • 如何修改传递给自定义 CMake 目标的环境变量?

    也许我错过了一些明显的东西 但我似乎无法弄清楚如何显式设置通过启动的进程可以看到的环境变量add custom target 我尝试了以下方法 set ENV PATH C Some Path ENV PATH add custom tar
  • 如何在 SQL Server 的 log4net 配置中使用存储过程进行日志记录

    我该如何更新commandText以及存储过程的参数部分 以便我可以通过 log4net 将错误记录到 SQL Server 中 我使用的是 SQL Server 2008 我的附加程序配置如下所示
  • Flask SQLAlchemy 设置动态 URI

    我有一个在 WSGI 下提供的 Flask 应用程序 其中数据库 URI 随着时间的推移而变化 每两个小时 URI 就会切换到另一个数据库 我利用这段时间填充一个数据库 而另一个数据库则为应用程序提供数据 我很难弄清楚如何最好地配置会话 以
  • 如何对文件执行 SHA1 哈希?

    如果我有一个文件想要监视任何更改 除了查看文件日期戳等 我如何对其内容执行 SHA1 哈希 I think这就是 GIT 所做的 所以我只想学习如何做 using FileStream stream File OpenRead C File
  • z-index 和 Javascript 事件

    我有几个彼此重叠的 div 具有不同的 z index 值 浏览器的默认行为似乎是触发绑定到最顶部 z index div 的事件 IE 我有多个onclick每个 div 都有一个 但当单击该区域时只有顶部的一个被触发 有没有一种方法可以
  • MVVM - RaisePropertyChanged 将代码变得一团糟

    MVVM 新手 请原谅我的无知 我认为我使用它是正确的 但我发现我的 ViewModel 有太多这些 RaisePropertyChanged SomeProperty 每次我设置一个属性时 我都必须提高那个该死的属性的变化 我怀念那些我可
  • 如何告诉 Proguard 混淆类名

    我希望混淆类名 我在 Proguard cfg 中有这一行 keepclasseswithmembers class public static
  • 使用 Spring 加载属性(通过系统属性)

    我的问题如下 I have server properties针对不同的环境 这些属性的路径是通过名为的系统属性提供的propertyPath 我该如何指导我的applicationContext xml加载给定的属性propertyPat
  • 什么是头文件和库文件? [复制]

    这个问题在这里已经有答案了 可能的重复 头文件和库有什么区别 谁能告诉我头文件和库文件的实际含义是什么以及它们的区别 例如 我们在程序中包含扩展名为 h 的头文件 它只是定义 但实际的实现是在库文件中定义的 这是在链接阶段完成的 这就是人们
  • C# 中 ++i 与 i += 1 有性能差异吗?

    i a 应等于 i i a 在 a 1 的情况下 据说它的效率不如 i 因为它涉及更多的内存访问 或者编译器会让它与 i 完全相同吗 答案很简单 C 编译器将 C 源代码转换为 IL 操作码 没有专用的 IL 操作码可以执行与 运算符等效的
  • 存储为 BINARY XML 时 Oracle XMLType 有多大

    Oracle 文档声称它将 XMLType 存储为 BINARY XML 比存储为 CLOB 更紧凑 但是我如何知道二进制 xml 占用了多少空间呢 CREATE TABLE t x XMLTYPE XMLTYPE x STORE AS B
  • logback - 重新映射特定记录器的日志级别

    我有一个 logback 配置 其中有一个带有阈值过滤器的附加程序
  • 如何在react中设置cookie?

    本来我是用下面的ajax来设置cookie的 function setCookieAjax ajax url Web Servlet setCookie contentType application x www form urlencod
  • 使用 Javascript 将 XML 转换为 CSV

    我正在寻求一些帮助 尝试将从 Amazon Product API 检索到的 XML 转换为 CSV 逗号分隔值 格式 我在这里找到了类似的主题 XML 到 CSV 转换问题但它使用 PHP 我想使用 javascript 这是我所拥有的示
  • 模型 Score() 与 r2_score 之间的差异

    我正在训练 Linear Regression 分类器并尝试衡量其预测准确性 from sklearn metrics import r2 score from sklearn linear model import LinearRegre
  • Pandas Dataframe 滚动两列和两行

    我得到了一个包含两列的数据框 其中包含经度和纬度坐标 将 pandas 导入为 pd values Latitude 0 47 021503365600005 1 47 021503365600005 2 47 02150336560000
  • 在 MVC 3 Razor 中显示上传的图像

    好吧 这个新手在显示上传到服务器的图像时犯了一些错误 model public class Person public int ID get set public string Name get set public string Imag