asp.net - 如何显示数据库中的所有图像?

标签 asp.net sql asp.net-mvc html asp.net-mvc-4

我正在 MVC 4 Visual Studio 中处理一个项目。我想做的是从我的数据库中选择所有图像并在我的 View 中显示所有图像。

在我的数据库中,我有 3 列: 编号 |文件标题 |文件路径

图像位于文件夹中。

我将其与下拉列表一起使用,当我选择值时,向我显示图像。

但是我的问题是,如何在列表中同时显示所有图像?

这是我的代码:

型号:

  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");
        }      
    }

Controller :

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

查看(尝试同时显示所有图像):

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

最佳答案

我建议稍微重构一下你的代码。下面是一些简单的事情,但正确地分离了代码。以下将在页面上同时显示所有图像。

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;" />
}

要将其放入下拉列表中,您可以将 Controller 代码修改为以下内容(您不希望在 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);

关于asp.net - 如何显示数据库中的所有图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17859728/

相关文章:

使用 OPENROWSET 将 SQL Server 导出到 Excel

c# - MVC 验证低于/高于其他值

mysql - 需要对代码进行一些修改

asp.net - $.post 与 $.ajax

java - 浏览器兼容性

sql - 用同一表中另一列的值更新每一行

asp.net - VS 2008 中“事件”选项卡随机出现和消失

SQL - 将具有编码文本值的行转换/转置为列

asp.net-mvc - ASP.NET MVC 中的 POST-redirect-GET 有什么替代方案?

c# - 使用简单注入(inject)器注入(inject) MVC Controller 构造函数时未注册参数