0

SQLサーバーデータベースにいくつかの画像をバイナリ形式で保存し、それらを取得して画像として表示できましたが、データベースからすべての画像をギャラリーとして表示する必要がありますが、最初の画像のみをギャラリーとして表示することができます.. .

私の問題は、最初のループ自体の戻りファイルとビューが表示されるforloopのように、コントローラーコードにあります

コントローラ

public ActionResult DislpayAllImage()
{
    DataSet dsa = new DataSet();
    dsa = objImage.getAllImages();
    DataTable dt = new DataTable();
    dt = dsa.Tables[0];
    if (dt != null)
    {
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            Byte[] image = (Byte[])dt.Rows[i]["UsImage"];
            return File(image, "image/jpg");
        }
    }

    return View();
}

意見

@foreach( var image in ViewData.Images )
{
    <img src="@Url.Action("DislpayAllImage", "Home",new { id = image.ImageID })" />
}
4

3 に答える 3

1

MVC コントローラーは 1 回だけ戻ることができます。それを試してみてください:

ViewData.Images = new List<byte[]>();
for (int i = 0; i < dt.Rows.Count; i++)
{
   dt.Rows.Add((Byte[])dt.Rows[i]["UsImage"]);
}
于 2013-01-23T10:29:01.287 に答える
0

return File(image, "image/jpg");まず、説明に書いたように最初の画像を返すため、 for ループではできません。

では、for ループで戻る代わりに、画像を収集してリストを返すのはどうですか?

List<File> fileList = new List<File>();
for (int i = 0; i < dt.Rows.Count; i++)
        {
            Byte[] image = (Byte[])dt.Rows[i]["UsImage"];
            fileList.Add(File(image, "image/jpg"));
        }

次に、画像をパラメータとしてビューを返します。

return View(fileList);
于 2013-01-23T10:23:17.800 に答える
0

これは単なる概念であり、コード全体が適切に実装およびテストされているわけではありません。

[HttpGet]
public ActionResult Index()
{
   ViewData["count"]=..count the number of rows which have binary image data
}

次に、ビューでビューデータを取得してループします

@for(int i=0;i<=ViewData["count"];i++)
{
   <img src="@Url.Action("DislpayAllImage", "Home",new { id = i})" />
}

次に、コントローラーで

[HttpPost]
public ActionResult Index(int id)
{
        DataSet dsa = new DataSet();

        dsa = objImage.getUserImage(id);
        Byte[] imagedata = (Byte[])dsa.Tables[0].Columns["MyImage"];
        return File(imagedata, "image/jpg");

}

それが役に立てば幸い

于 2013-01-23T12:15:49.597 に答える