0

我以二进制格式在 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 })" />
}
4

3 回答 3

1

MVC 控制器只能返回一次!尝试一下:

ViewData.Images = new List<byte[]>();
for (int i = 0; i < dt.Rows.Count; i++)
{
   dt.Rows.Add((Byte[])dt.Rows[i]["UsImage"]);
}
于 2013-01-23T10:29:01.287 回答
0

首先,你不能return File(image, "image/jpg");在你的 for 循环中做,因为它会返回你在解释中写的第一张图片。

因此,与其在 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);
于 2013-01-23T10:23:17.800 回答
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");

}

希望能帮助到你

于 2013-01-23T12:15:49.597 回答