【问题标题】:Select all images using ASP.NET使用 ASP.NET 选择所有图像
【发布时间】:2016-02-09 10:31:11
【问题描述】:

我是 ASP.NET 和 C# 的新手。我正在尝试从文件夹中检索所有图像并将其显示在页面上,但它只选择一个图像。

我的 ASP.NET 代码:

<form id="form1" runat="server" class="col-lg-5">            
    <asp:Image ID="Image" runat="server" />
</form>

我的 C# 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

namespace Blog
{
    public partial class index : System.Web.UI.Page
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["blogconnection"].ToString());
        protected void Page_Load(object sender, EventArgs e)
        {
            con.Open();
            string allimage;
            string qry="select * from images";
            SqlCommand cmd = new SqlCommand(qry, con);
            SqlDataReader dr =cmd.ExecuteReader();

            if (dr.HasRows)
            {
                while(dr.Read())
                {
                   if (!string.IsNullOrEmpty(Convert.ToString(dr["Image_Path"])))
                   {                                             
                        Image.ImageUrl = Convert.ToString(dr["Image_Path"]);                                         
                   }
                }
           }
           con.Close();
       }               
    }
}

我想要什么:我想选择存储在 sql 表中的路径的所有图像。

附加: 有没有办法从存储在 sql 中的路径的文件夹中选择视频,意思是从不同的文件夹中选择视频和图像,并按指定日期或最新上传显示在同一页面上等等

任何帮助将不胜感激。

编辑#1

在 php 中我使用下面的代码来获取所有图像并显示它,有没有与 ASP.NET 中的下面代码等效的东西?

PHP 代码

<?php
include 'conn.php';
$smt=$conn->prepare('SELECT * FROM post');
$smt->execute();

?>
<?php include 'header.php';

?>
<div class="">
<?php
if(isset($_SESSION['user']))
{
include 'nav.php';
}
else
{
include 'nav-simple.php';
}
?>
<?php include 'slider.php';?>

<?php include 'right_sidebar.php';?>

    <div class="col-md-1 top_space"></div>
<div class="container col-md-8 main-container-top">


    <br/>

<div class="">
    <?php while ($gdata = $smt->fetch(PDO::FETCH_OBJ)): ?>
        <a href="#" class="col-md-4"><img src="posts/<?php echo $gdata->Post_Path; ?>" alt="image" class="post-image"/></a>
        <div class="media-body col-md-8 post pull-left">
            <div class="post-overview">
                <ul>
                    <li class="post-category"><?php echo $gdata->Category; ?></li>
                    <li class="post-timestemp">Post on <?php echo $gdata->Post_Date; ?></li>
                </ul>


                <a href="post-description.php?id=<?php echo $gdata->Id ?>"><h4
                        class="media-heading h4"><?php echo $gdata->Title; ?></h4></a>

                <p class="post-text"><?php echo $gdata->Post; ?></p><br/>
            </div>


        </div>
<div class="post-image-space"></div>
    <?php endwhile;?>

【问题讨论】:

  • 你不能将多个图像压缩到一个 asp:image 对象中。网格视图怎么样?
  • 在您的页面上放置一个Repeater 控件,并在其ItemTemplate 中放置一个Image 控件。将 Repeater 控件绑定到图像 URL 列表。将 Image 的 ImageUrl 属性设置为合适的数据绑定表达式。
  • 在 PHP html 中使用代码循环生成,在 ASP.NET 中,您指定了单个图像类型对象并尝试将所有图像提供给一个 HTML 对象,该对象将始终为您检索最后一张图像。

标签: c# sql asp.net


【解决方案1】:

在后面的代码中编写您的 Collection() 方法来检索图像作为 ListStrings 像这样(最好使用 Using 语句):

protected IEnumerable<string> Collection()
{
     string address = ConfigurationManager.ConnectionStrings["blogconnection"].ToString();
     using (SqlConnection con = new SqlConnection(address))
     {
         con.Open();
         string qry = "select * from images";
         SqlCommand cmd = new SqlCommand(qry, con);
         using (SqlDataReader dr = cmd.ExecuteReader())
         {
             if (!dr.HasRows) return allimage;
             while (dr.Read())
             {
                 if (!string.IsNullOrEmpty(Convert.ToString(dr["Image_Path"])))
                 {
                     yield return (dr["Image_Path"].ToString());
                 }
              }
          }
      }
}

那么你可以像这样使用asp:Repeater

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="imgCats">
      <ItemTemplate>
         <div>
            <img src='<%# Container.DataItem.ToString() %>' alt="" />
         </div>                  
      </ItemTemplate>
</asp:Repeater>
<asp:ObjectDataSource ID="imgCats" runat="server" SelectMethod="Collection" 
          TypeName="WebApplication1.WebForm8">
</asp:ObjectDataSource>

或者你可以这样做:

<form id="form1" runat="server" class="col-lg-5">
  <div>
    <ul>
        <% var drc = Collection();
           foreach (var item in drc)
           { %>
            <li>
                <img src="<%: item %>"/>
            </li>
        <% } %>
    </ul>
  </div>
</form>

【讨论】:

    【解决方案2】:

    您可以将新的 asp:image 对象动态添加到 form1。

    Image img = new Image();
    img.ImageUrl = dr["Image_Path"].ToString();
    img.AlternateText = "Test image";
    form1.Controls.Add(img);
    

    【讨论】:

    • while 循环呢?在asp.net中没有处理这样的过程,因为在php中我使用while循环得到这样的结果。有没有办法使用while循环?
    • 动态添加图像是可能的,但您需要在页面生命周期中的正确位置执行此操作,以便它们能够很好地处理回发。使用Repeater然后将数据绑定到它会好得多。
    【解决方案3】:

    问题出在这句话中:

    Image.ImageUrl = Convert.ToString(dr["Image_Path"]);
    

    这个语句有什么作用?它将每个 image path 值分配给只有一个 Image.ImageUrl。因此,Image.ImageUrl 将保存最后分配的image path。结果只会显示一张图片。这不是你想要的。

    你想要的是:显示所有图片 --> 将 每个 image path 分配给 每个 Image.ImageUrl --> 动态创建Image并将其添加到表单中。因此,您应该执行以下操作,而不是编写该语句:

    Image img = new Image();
    img.ImageUrl = dr["Image_Path"].ToString();
    img.AlternateText = "Test image";
    form1.Controls.Add(img);
    

    代码未经测试。只关注这个想法。你可以这样做,或者使用repeater,或者你自己的方式,这取决于你。

    如果您有不清楚的地方,请随时问我 :)

    【讨论】:

      【解决方案4】:

      您还可以通过自定义样式使用控件来显示所需的图像

      【讨论】:

        【解决方案5】:

        1) 很明显,您不能在单个 HTML 对象中显示多个图像。 您必须使用 RepeaterGridViewDataGrid 或根据您希望在页面上显示的方式(即 HTML 设计)使用动态 HTML 生成

        2) 正确跟踪 ASP.NET 页面生命周期事件(在您的情况下,您可以在完成初始化 RepeaterGridviewDatagrid 后在 PageLoad() 事件中编写代码)

        3)你也可以播放视频,但是你需要一些播放器,它不会那么简单(你可以使用第三方工具)

        【讨论】:

          【解决方案6】:

          我已修改您的代码以使其正常工作。而是在 aspx 中定义图像,从后面的代码中动态添加它。

          您修改后的 ASP.NET 代码:

          <form id="form1" runat="server" class="col-lg-5">            
          
          </form>
          

          您修改后的 C# 代码:

          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Web;
          using System.Web.UI;
          using System.Web.UI.WebControls;
          using System.Data.SqlClient;
          using System.Data;
          using System.Configuration;
          
          namespace Blog
          {
              public partial class index : System.Web.UI.Page
              {
                  SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["blogconnection"].ToString());
                  protected void Page_Load(object sender, EventArgs e)
                  {
                      con.Open();
                      string allimage;
                      string qry="select * from images";
                      SqlCommand cmd = new SqlCommand(qry, con);
                      SqlDataReader dr =cmd.ExecuteReader();
          
                      if (dr.HasRows)
                      {
                          while(dr.Read())
                          {
                             if (!string.IsNullOrEmpty(Convert.ToString(dr["Image_Path"])))
                             {                                             
                                  Image img = new Image();
                                  img.ImageUrl = dr["Image_Path"].ToString();
                                  img.AlternateText = dr["Image_Path"].ToString();
                                  form1.Controls.Add(img);                                         
                             }
                          }
                     }
                     con.Close();
                 }               
              }
          }
          

          【讨论】:

          • 那么您的代码不会使 UI 清晰,我的意思是您的代码与 UI 不兼容。
          【解决方案7】:

          我在此处添加了一些屏幕截图,希望您可以从这里继续。

          【讨论】:

          • 人们不会用图片编码。代码是文本。在你的答案中使用文字,而不是图片。图片应该只是补充。此外,这并不能回答将多张图片放到页面上的问题。
          • 这是来自视觉工作室的屏幕截图。就像我说的,我不确定你想如何渲染它。你有一个图像,但这会给你所有的图像。让我知道你想如何显示图像,你是否必须渲染,例如div 元素或 ASP.NET 表单控件,例如网格视图?告诉我
          猜你喜欢
          • 1970-01-01
          • 2013-03-19
          • 1970-01-01
          • 2011-02-20
          • 1970-01-01
          • 2014-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多