在视图中显示数据库中的多个图像

时间:2018-11-05 23:34:42

标签: c# html asp.net asp.net-mvc

我正在一个项目中,用户应该能够上传图像并将其显示在自己的页面上作为网格库。

我已经看过本教程,能够将图像从应用程序上传到数据库,并显示具有特定ID的图像。一切正常。

https://www.youtube.com/watch?v=5L5W-AE-sEs&

我的视图控制器如下:

[HttpGet]
        public ActionResult View(int id)
        {
            Image imageModel = new Image();
            using (portfolio_project_dbEntities db = new portfolio_project_dbEntities())
            {
                imageModel = db.Images.Where(x => x.ImageID == id).FirstOrDefault();
            }
            return View(imageModel);
        }

视图部分:

<img src="@Url.Content(Model.ImagePath)" width="200"/>

现在,我希望能够在一个页面上显示多个图像(具有相同用户名的图像),但是我真的不知道如何做到这一点。 如何将多个图像从控制器传递到视图?还是在视图中这样做更好?

1 个答案:

答案 0 :(得分:2)

FirstOrDefault方法从集合中返回单个项目(或默认值)。因此,在代码中,您共享了以下问题:使用此表达式.Where(x => x.ImageID == id)过滤图像,然后在其上调用FirstOrDefault方法,这样最多会产生一个项目。

因此,如果要显示多个项目,请删除该FirstOrDefault方法调用。在下面的示例中,我假设您的Image对象具有UserId类型的int属性,并且您要使用与参数值相同的UserId值来过滤Image对象。因此,请使用表达式在您的Where方法中进行检查。

[HttpGet]
public ActionResult View(int id)
{
   var images = new List<Image>();
   var db = new portfolio_project_dbEntities())
   {
      images  = db.Images
                  .Where(x => x.UserId == id)
                  .ToList();
    }
    // images is a list of Image objects. Let's pass it to the view.
    return View(images);
 }

现在,由于您要向视图传递Image对象的集合,因此请确保将视图强类型化为Image的集合。

@model IEnumerable<YourNamespaceHere.Image>
<h1>Images</h1>
@foeach(var img in Model)
{
  <img src="@Url.Content(img .ImagePath)" width="200"/>
}