我以二进制格式在sql server数据库中存储了一些图像,然后将它们检索回来并且能够显示为图像,但我的要求是我应该将所有图像显示为来自数据库的图库但是我只能显示第一个图像廊...
我的问题出现在我的控制器代码中,就像在forloop中它的第一个循环本身的返回文件并显示视图
控制器
public ActionResult DislpayAllImage()
{
DataSet dsa = new DataSet();
dsa = objImage.getAllImages();
DataTable dt = new DataTable();
dt = dsa.Tables[0];
if (dt != null)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
Byte[] image = (Byte[])dt.Rows[i]["UsImage"];
return File(image, "image/jpg");
}
}
return View();
}
查看
@foreach( var image in ViewData.Images )
{
<img src="@Url.Action("DislpayAllImage", "Home",new { id = image.ImageID })" />
}
答案 0 :(得分:1)
MVC控制器只能返回一次!试试吧:
ViewData.Images = new List<byte[]>();
for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows.Add((Byte[])dt.Rows[i]["UsImage"]);
}
答案 1 :(得分:0)
首先,你不能在for循环中执行return File(image, "image/jpg");
,因为它将返回你在解释中写的第一张图像。
所以不是在for循环中返回,而是如何收集图像并返回列表?
List<File> fileList = new List<File>();
for (int i = 0; i < dt.Rows.Count; i++)
{
Byte[] image = (Byte[])dt.Rows[i]["UsImage"];
fileList.Add(File(image, "image/jpg"));
}
然后以图像作为参数返回视图。
return View(fileList);
答案 2 :(得分:0)
这只是一个概念,并非整个代码都已正确实施和测试。
[HttpGet]
public ActionResult Index()
{
ViewData["count"]=..count the number of rows which have binary image data
}
然后在您的视图中获取视图数据并循环遍历
@for(int i=0;i<=ViewData["count"];i++)
{
<img src="@Url.Action("DislpayAllImage", "Home",new { id = i})" />
}
然后在您的控制器中
[HttpPost]
public ActionResult Index(int id)
{
DataSet dsa = new DataSet();
dsa = objImage.getUserImage(id);
Byte[] imagedata = (Byte[])dsa.Tables[0].Columns["MyImage"];
return File(imagedata, "image/jpg");
}
希望有所帮助