使用 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()
方法来检索图像作为 List
的 Strings
像这样(最好使用 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 对象中显示多个图像。
您必须使用 Repeater
、GridView
或 DataGrid
或根据您希望在页面上显示的方式(即 HTML 设计)使用动态 HTML 生成
2) 正确跟踪 ASP.NET 页面生命周期事件(在您的情况下,您可以在完成初始化 Repeater
、Gridview
或 Datagrid
后在 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 中使用 jQuery AjaxForm 问题
使用 ASP.NET 表单身份验证,如何让图像出现在登录屏幕上?