記事詳細


投稿日
2026年06月13日08時17分
タイトル

ASP.NET mvc: データベース内の写真の既存画像一覧をサムネイル(隙間なし)表示するjqueryのコードサンプルはありますか?

内容

はい、ASP.NET MVC でデータベース内の画像を一覧表示し、
jQuery で「隙間なし(masonry風)」のサムネイルレイアウトを実現するサンプルを作れます。

以下は 完全動作可能な最小構成例 です。
(画像は DB に varbinary(max) で保存されている想定)

1. モデル(ImageModel.cs)

Csharp
public class ImageModel { public int Id { get; set; } public byte[] ImageData { get; set; } public string ContentType { get; set; } }

2. コントローラ(GalleryController.cs)

Csharp
using System.Linq; using System.Web.Mvc; public class GalleryController : Controller { private readonly ApplicationDbContext _db = new ApplicationDbContext(); // 一覧ページ public ActionResult Index() { var images = _db.Images.ToList(); return View(images); } // 画像取得(<img src> 用) public FileContentResult GetImage(int id) { var img = _db.Images.FirstOrDefault(i => i.Id == id); if (img != null) { return File(img.ImageData, img.ContentType); } return null; } }

3. ビュー(Index.cshtml)

Html
@model IEnumerable<ImageModel> @{ ViewBag.Title = "画像ギャラリー"; } <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/masonry/4.2.2/masonry.min.css" /> <style> /* サムネイルの基本スタイル */ .grid { margin: 0 auto; } .grid-item { width: 200px; margin: 0; padding: 0; } .grid-item img { display: block; width: 100%; height: auto; } </style> <div class="grid"> @foreach (var img in Model) { <div class="grid-item"> <img src="@Url.Action("GetImage", "Gallery", new { id = img.Id })" alt="photo" /> </div> } </div> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js"></script> <script> $(window).on('load', function () { $('.grid').masonry({ itemSelector: '.grid-item', columnWidth: 200, gutter: 0, // 隙間なし fitWidth: true }); }); </script>

4. ポイント

  • DBから画像を取得するために GetImage アクションを <img src> に直接指定。
  • 隙間なしレイアウトは jQuery + Masonry を使用。
  • gutter: 0 にすることで画像間の余白をゼロに。
  • 画像サイズは CSS で統一幅にして高さは自動調整。
  • DB の ImageData は byte[]ContentType は "image/jpeg" などを保存。

もし CSSだけで隙間なしのサムネイル を作りたい場合は、
display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 0;
を使えば jQuery なしでも可能です。

必要であれば、このサンプルを CSS Grid版(jQuery不要) に書き換えたコードも作れますが、
Masonry の方が高さがバラバラな画像でもきれいに詰められます。

このあと、希望があれば CSS Grid版の隙間なしサムネイル表示 も提示できますが、
作りますか?
CSSだけで軽量に動きます。

Powered by Froala Editor

添付画像

画像はありません
Genreのカテゴリ-名
Controllers
編集 | 記事一覧