如何使用字节数组返回多个图像?

时间:2016-09-28 23:35:05

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

你好有人帮我回复了几张图片,因为我使用的是FirstOrDefault,所以很有可能带来第一张图片。

此功能来自控制器和剃刀部分

public async Task<ActionResult> Detalle(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }

    Item item = await db.Items.Include(i => i.Imagenes).Where(p => p.ProductoID == id).FirstOrDefaultAsync();

    if (item == null)
    {
        return HttpNotFound();
    }

    return View(item);
}

public ActionResult RenderImage2(int id)
{
    Imagen imagen = db.Imagenes.Where(i => i.ProductoID == id).FirstOrDefault();
    byte[] photoBack = imagen.InternalImage;
    return File(photoBack, "image/png");
}

Razor:

@foreach (var item in Model.Imagenes)
{
    <li>
        <a class="thumb-item-link" data-slide-index="0" href="">
            <img src="@Url.Action("RenderImage2", new { id = Model.ProductoID})" alt="img" />
        </a>
    </li>
}

3 个答案:

答案 0 :(得分:0)

您不能在同一个Action中返回多个图像,因为它只返回单个文件,但您可以生成包含所有图像的图像精灵并将其作为单个文件返回但在这种情况下您的客户必须明白它期待图像精灵而不是图像

答案 1 :(得分:0)

我要做的是为每个Imagen(为此示例命名为ImagenID)拥有唯一ID。

所以你的方法看起来像:

public ActionResult RenderImage2(int id)
{
    Imagen imagen = db.Imagenes.Where(i => i.ImagenID == id).FirstOrDefault();
    byte[] photoBack = imagen.InternalImage;
    return File(photoBack, "image/png");
}

由于每个Imagen都有唯一的ID,因此只能返回您想要的图像。

在你的剃刀中,你只需使用你已经跟踪的item

@foreach (var item in Model.Imagenes)
{
    <li>
        <a class="thumb-item-link" data-slide-index="0" href="">
            <img src="@Url.Action("RenderImage2", new { id = item.ImagenID })" alt="img" />
        </a>
    </li>
}

假设Model.Imagenes包含来自与Imagen相同位置的db.Imagenes个对象。

答案 2 :(得分:0)

解决!!!我只需要通过控制器和视图中的图像ID更改产品ID。