MVC:使用数据库中的其他表单数据在表单中显示图像

时间:2010-09-08 22:06:43

标签: asp.net-mvc

关于如何显示图像,作为图像存储在数据库中以及作为代码中的字节数组的问题已被多次回答(例如,Display image from database in asp mvc),但如果要显示该怎么办?表单上下文中的图像。也就是说,我有一个具有多个字段的对象,其中一个是图像。我已经让它工作,用户可以上传图像,并将其作为保存过程的一部分与其他对象字段一起存储。但是如何将其与其他数据一起发回(并理想地显示)以填充编辑表单?我见过的所有解决方案都有某种ShowImage动作,它接受Id并检索图像并将其流式传输到响应中。但是,我不知道在这种情况下它是如何工作的。

我唯一能想到的是填充表单,然后使用jquery来检索图像并在表单中显示它,但这是一些看似不必要的额外流量。

任何人都知道怎么做?

感谢。

1 个答案:

答案 0 :(得分:0)

我会做一个控制器动作,只为你的图像提供服务。

然后在您的视图中显示图像和其他数据,只需将URL传递给正确的操作,该操作将使用其余视图数据提供图像。然后使用img标记将视图数据网址设为src,以显示您的图片。 img会调用该网址并为您抓取。

所以为了分解你有两个控制器动作,比如GetImage和FormDetails等等,GetImage只用于从你的数据库中获取图像并返回字节数组作为图像响应(你也可以做一些服务器端检查安全在这里)。 FormDetails操作将获取所有数据,包括仅包含图像的URL,并将它们放在一起。

根据您的评论进行编辑:要绕过这两个电话,您可以实施一些缓存...上传后,您可以暂时存储它,如:

// Cache it for 5 mins (and keep it cached until it has not be accessed for 5 mins.
System.Web.HttpContext.Current.Cache.Insert("YourImage" + imageID.ToString(),
    yourImage, null, System.Web.Caching.Cache.NoAbsoluteExpiration, 
    new TimeSpan(0, 5, 0)); 

然后在提供图像的控制器操作中,您可以在执行数据库调用之前检查缓存中是否存在该值,这将在大多数情况下为您节省第二次旅行,如果您的方案如上所述:

if (System.Web.HttpContext.Current.Cache["YourImage" + imageID.ToString()] == null)
{
    // get image from DB
}
else
{
    // image is cached so serve it up!
}