1

データベースから画像のリストを取得し、ビューに表示したいと思います。すべての画像は、データベースに「画像」データ型形式で保存されます。以下は、私のコントローラー、ビューモデル、およびビューです。正しいかどうかわかりませんので、よろしくお願いします。これは単なるサンプル プロジェクトであるため、Linq2SQL を使用しました。私のコードを修正し、ビューに画像のリストを表示する方法を教えてください。初心者なので分かりやすく教えていただけると助かります。

ビューモデル:

public class ImageViewModel
{
    public byte[] Image { get; set; }
    public int imageId { get; set; }
    public IEnumerable<int> imageList { get; set; }     
}

コントローラー: * (更新および解決済み) *

   public ActionResult Index()
{

    var imagesList = (from q in ctx.Images
                      select new Models.ImageViewModel
                      {
                      imageId = q.id
                      }).ToList();

    IEnumerable<int> imageIds = imagesList.Select(x=>x.imageId);
    Models.Test obj = new Models.Test();
    obj.imageList = imageIds;
    return View(obj);
}

    public ActionResult View(int imageId)
    {
        byte[] imageArray = (from q in ctx.Images
                             where q.id == imageId
                             select q.data.ToArray()).FirstOrDefault(); 
        return File (imageArray,"image/jpg");
    }

意見:

   @model MvcApplication3.Models.ImageViewModel

   @foreach (var id in Model.imageList)
{ 
    <img src="@Url.Action("View", "Home", new { imageId = id},null)" />
}
4

3 に答える 3

4

画像の一意の識別子を取得する新しいアクションを作成し、ID を使用しbyte[]てデータベースから取得し、次のように応答ストリームに直接書き込みます

Response.ContentType = "content type of your image";
//filecontents is the byte[]
Response.BinaryWrite(filecontents);

次に、データベースから画像を表示する必要があるときはいつでも、次のようにソースを設定します

<img src="/Controller/Action/ImageId"/>
于 2013-04-18T12:25:34.193 に答える
1

Britton もこれを推奨しましたが、繰り返します。

目的を達成するには、2 つのアクション/ビューが必要です。1 つは単一の画像を取得するもので、もう 1 つは前述のアクションを使用して単一の画像を取得するすべての画像のリストです。

これが私が言いたいことの非常に大まかな例です。これがコンパイルされることを確認するためにこれをテストしていませんが、これを行う方法の大まかなアイデアが得られるはずです。

class ImageLibrary
}
    public ActionResult List()
    {
        //I'm going to assume here you have some sort of service or repository for obtaining your images at this point.
        //This doesn't retrieve the actual image data, just the metadata. It's less of a hit on the DB this way
        var imagesList = imageService.ListAllImages()
        IEnumerable<int> imageIds = imagesList.Select(x=>x.ImageId)
        return View("List", imageIds)
    }

    public ActionResult View(int imageId)
    {
        var image = imageService.GetImage(imageId);

        var contentDisposition = new System.Net.Mime.ContentDisposition() { FileName = image.Name, Inline = true };
        Response.AppendHeader("Content-Disposition", contentDisposition.ToString());
        return File(image.Data, image.ContentType); //including content type since I'm assuming the image could be a jpg, gif, png, etc./
    }

}

そして、ImageLibrary/Listビューで。

@foreach(var id in Model)
{
    <img src="@Url.Action("View", "ImageLibrary", new {imageId = id})">
}
于 2013-04-18T13:58:41.673 に答える
0

データをbase64文字列として取得するかどうかは正確にはわかりません。もしそうなら、試してみてください:

<img src="data:image/png;base64,@(item.bitimage)" alt="test.png" />

その試みに失敗した:

<img src="data:image/png;base64,@ToBase64String(item.bitimage)" alt="test.png" />

http://www.techerator.com/2011/12/how-to-embed-images-directly-into-your-html/

于 2013-04-18T12:13:11.770 に答える