You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC视图无法显示数据库存储图片且RetrieveImage动作未触发求助

问题根因

你遇到的问题核心是img标签的请求路径配置错误,导致请求根本没有路由到RetrieveImage动作:

  • 你写的/Content/RetrieveImage/@item.Id路径中,/Content/是ASP.NET MVC默认的静态资源目录,ASP.NET运行时会默认把该路径下的请求当做静态文件处理,不会转发给控制器路由,所以你的RetrieveImage断点永远不会触发。
  • 路径没有正确指向对应的控制器动作,就算没有静态资源拦截的问题,也找不到对应的处理逻辑。
  • 浏览器请求该错误路径时返回404,img标签无法渲染资源,所以表现为Attachment列无内容展示。

解决方案

1. 修正视图中img标签的src路径

不要硬编码路径,用MVC提供的Url.Action辅助方法生成正确的动作路径,假设你的RetrieveImage动作写在HomeController里,就把img标签改成如下写法:

<img src="@Url.Action("RetrieveImage", "Home", new { id = item.Id })" alt="" height="50" width="50" />

如果你的控制器不是Home,替换成你实际的控制器名称即可。

2. 优化RetrieveImage动作的异常处理

当前代码如果查询不到对应id的附件会直接抛空引用异常,且返回null不符合HTTP响应规范,建议调整为:

public ActionResult RetrieveImage(int id)
{
    var cover = db.PurchasingItems.Where(temp => temp.Id == id).Select(temp => temp.Attachment).FirstOrDefault();
    if (cover != null)
    {
        return File(cover, "image/jpeg");
    }
    // 没有找到图片时可以返回一个默认占位图,或者返回404
    return HttpNotFound();
}

3. 可选校验路由配置

检查你的RouteConfig.cs中有没有特殊的路由规则拦截了对应路径的请求,确保控制器动作可以被正常路由到。

完成以上修改后刷新页面即可触发RetrieveImage动作,正常加载数据库存储的图片。

内容的提问来源于stack exchange,提问作者smc develpments

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:51:00