2

MVC 4ビジュアルスタジオでプロジェクトに取り組んでいます。私がやろうとしているのは、データベースからすべての画像を選択し、すべてをビューに表示することです。

私のデータベースには3つの列があります:id | ファイルタイトル | ファイルパス

画像はフォルダにあります。

ドロップダウンリストで動作させ、値を選択すると画像が表示されます。

しかし、私の質問ですが、すべての画像を同時にリストに表示するにはどうすればよいですか?

ここに私のコードがあります:

モデル:

  public class Image
    {
        public SelectList ImageList { get; set; }

        public Image()
        {
            ImageList = GetImages();
        }

        public SelectList GetImages()
        {
            var list = new List<SelectListItem>();
            string connection = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

            using (var con = new SqlConnection(connection))
            {
                con.Open();
                using (var command = new SqlCommand("SELECT * FROM myimage", con))
                {
                    SqlDataReader reader = command.ExecuteReader();
                    while (reader.Read())
                    {
                        string title = reader[1] as string;
                        string imagePath = reader[2] as string;
                        list.Add(new SelectListItem() { Text = title, Value = imagePath });
                    }
                }
                con.Close();
            }
            return new SelectList(list, "Value", "Text");
        }      
    }

コントローラ:

public ViewResult ShowImages()
        {
            Image image = new Image();
            return View(image);
        }

VIEW (すべての画像を同時に表示しようとしています):

@foreach (var image in Model.ImageList)
{ 
    <img src="@Url.Content(image)" alt="image" id="image" style="width:200px;height:200px;" />
}
4

2 に答える 2

2

コードを少しリファクタリングすることをお勧めします。以下は単純なものですが、コードを適切に分離しています。以下は、ページ上のすべての画像を一度に表示します。

public class Image
{
   public string Title {get; set;}
    public string ImagePath {get; set;}
}

public class ImageRepository
{
    public static IEnumerable<Image> GetImages(){
        var list = new List<Image>();
       string connection = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

       using (var con = new SqlConnection(connection))
       {
           con.Open();
           using (var command = new SqlCommand("SELECT * FROM myimage", con))
           {
               SqlDataReader reader = command.ExecuteReader();
               while (reader.Read())
               {
                   string title = reader[1] as string;
                   string imagePath = reader[2] as string;
                   list.Add(new Image() { Title = title, ImagePath = imagePath });
               }
           }
           con.Close();
       }
       return list;
    }
}

public ViewResult ShowImages()
{
  var images = ImageRepository.GetImages();
  return View(images);
}


@foreach (var image in Model)
{ 
    <img src="@Url.Content(image.ImagePath)" alt="image.Title" style="width:200px;height:200px;" />
}

これをドロップダウンに配置するには、コントローラー コードを次のように変更します (SQL コード内にその SelectList を含める必要はありません)。

public ActionResult ShowImages()
{
  var images = ImageRepository.GetImages();
  var imageSelectList = new SelectList(images, "ImagePath", "Title");
  return View(imageSelectList);
}

@Html.DropDownList("ImageList", Model);

ここからさらに一歩進んで、適切な ViewModel も配置します。

public class ShowImagesViewModel{
    public ShowImagesViewModel(IEnumerable<Image> images){
        this.Images = images;
    }

    public IEnumerable<Image> Images {get; private set;}
    public SelectList ImageSelectList {
        get
        {
            return new SelectList(images, "ImagePath", "Title");
        }
    }

}

public ActionResult ShowImages()
{
  var images = ImageRepository.GetImages();
  var model = new ShowImagesViewModel(images);
  return View(model);
}

@Html.DropDownList("ImageList", Model.ImageSelectList);
于 2013-07-25T15:13:18.610 に答える
0

あなたはこのようなものを探していますか:

@for (var i = 0; i < Model.ImageList.Count; i++)
{ 
    <img src="@Url.Content(Model.ImageList[i].Value)" alt="image" id="'image' +  @i.ToString()" style="width:200px;height:200px;" />  

}
于 2013-07-25T15:02:55.217 に答える