您可以使用控制器操作来返回图像或URL字符串

时间:2014-10-14 15:35:55

标签: asp.net asp.net-mvc image razor

我有一个需要显示的数据列表。每个项目都有一个从数据库中提取的图像字段。

如果图像为空,则需要从服务器显示随机库存图像。

我想做类似的事情:

<img src='@Url.Action("GetImage", "MeetTheTeam", new { id = TeamMate.Id })' />     

然后在控制器中:

public ActionResult GetImage(int id)
    {
        var item = team.Where(teammate => teammate.Id == id).SingleOrDefault();

        if (item.Image != null)
        {
            return File(item.Image, "image/jpg");
        }
        else
        {                
            return Content(AppSettings.AppRoot + "content/images/MeetTheTeam/v2/gray-block" + random.Next(1, 14) + ".jpg");
        }
    }

但这不起作用,我无法调试到控制器......

这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

您无法返回流或字符串。 Url.Action只打印出此资源的URL,然后客户端的浏览器将使用该URL来获取图像。对于现有图像,您返回一个图像文件流,浏览器将其作为图像快乐呈现,但在回退的情况下,您只返回文本,浏览器也会尝试(并失败)解释为图像。

您有两种选择:

  1. 不是返回Content,而是返回Redirect,其中包含传递图像的网址。这将导致浏览器尝试加载该URL,从而产生良好的图像流。

  2. 从文件系统中打开后备图像,然后像处理从数据库中加载的图像一样返回流。