使用 ASP.NET 选择所有图像

Posted

技术标签:

【中文标题】使用 ASP.NET 选择所有图像【英文标题】:Select all images using 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; ?>"  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 对象,该对象将始终为您检索最后一张图像。 【参考方案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() %>'  />
         </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 表单控件,例如网格视图?告诉我

以上是关于使用 ASP.NET 选择所有图像的主要内容,如果未能解决你的问题,请参考以下文章

是否有适用于 Azure 的 c#/asp.net mvc3 文件图像选择器/上传器控件

身体上的动态背景图像 (ASP.NET)

在 ASP.NET 中使用 jQuery AjaxForm 问题

使用 ASP.NET 表单身份验证,如何让图像出现在登录屏幕上?

文件/图像上传后 ASP.NET 3.0 mvc 应用程序崩溃

如何在 c# ASP.NET 中使用 GridView_RowCommand 事件从 GridView 获取图像