从数据库加载图像时出错

时间:2013-06-05 21:01:24

标签: asp.net asp.net-mvc view controller models

我有一个关于在索引视图中显示从mysql数据库加载的图像的问题。

在我的数据库表“可交付成果”中,我有“item_id”,“deliverable_image”和“afstudeerrichting_id”。 “item_id”和“afstudeerrichting_id”是来自其他表格的FK。

我想在afstudeerrichting_id = ..

时显示图像

控制器:

public ActionResult Index()
{
    var model = repository.GetIdsOfImages(1);
    return View(model.ToList());
}

public ActionResult ShowImage(int id)
{
    IQueryable<byte[]> data = repository.GetImages(id);
    byte[] firstimage = data.First();

    return File(firstimage, "image/png");
}

存储库:

public IQueryable<long> GetIdsOfImages(int afstudeerrichtingid)
{
    return from deliverable in entities.deliverables
           where deliverable.afstudeerichting_id.Equals(afstudeerrichtingid)
           select deliverable.item_id;
}
public IQueryable<byte[]> GetImages(int itemID)
{
    return from deliverable in entities.deliverables
           where deliverable.item_id.Equals(itemID)
           select deliverable.deliverable_image;
}

查看:

@foreach(var imgID in Model.DeliverablesIDsList)
{
    <img src="@Url.Action("ShowImage", "Deliverable", new { DeliverableID = imgID })" />
}

Viewmodel 中,我有:

public List<long> DeliverablesIDsList { get; set; }
public int DeliverableID { get; set; }

但现在我总是收到这个错误:

  

传递到字典中的模型项的类型为'System.Collections.Generic.List`1 [System.Int64]',但此字典需要类型为'GDMfrontEnd.Models.DeliverableViewModel'的模型项。

有人知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

您正在向视图发送int64 repository.GetIdsOfImages(1).ToList()列表,并且视图需要DeliverableViewModel,因此您必须创建模型并将列表放入模型并将其发送到视图

行动应如下:

public ActionResult Index()
{
    var model = repository.GetIdsOfImages(1);
    DeliverableViewModel model = new DeliverableViewModel()
    model.DeliverablesIDsList = repository.GetIdsOfImages(1).ToList();
    return View(model); //send to the view a model type of DeliverableViewModel
}

现在使用ActionResult ShowImage,操作需要id parmeter并且您正在发送DeliverableID,因此更改de var name

public ActionResult ShowImage(int DeliverableID)
{
    IQueryable<byte[]> data = repository.GetImages(DeliverableID);
    byte[] firstimage = data.First();

    return File(firstimage, "image/png");
}