我是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;?>
答案 0 :(得分:8)
在后面的代码中编写Collection()
方法以List
Strings
的方式检索图像(使用Using
语句更好< / em>的):
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>
答案 1 :(得分:3)
您可以动态地将新的asp:image对象添加到form1。
Image img = new Image();
img.ImageUrl = dr["Image_Path"].ToString();
img.AlternateText = "Test image";
form1.Controls.Add(img);
答案 2 :(得分:1)
问题出在这句话中:
Image.ImageUrl = Convert.ToString(dr["Image_Path"]);
这句话的作用是什么?它会将每个 image path
值分配给只有一个 Image.ImageUrl
。因此,Image.ImageUrl
将保留最后分配的image path
。结果只显示一张图片。这不你想要的。
你想要的是:显示所有图片 - &gt;将每个 image path
分配给每个 Image.ImageUrl
- &gt; 动态创建Image
并将其添加到表单。因此,您应该执行以下操作:
Image img = new Image();
img.ImageUrl = dr["Image_Path"].ToString();
img.AlternateText = "Test image";
form1.Controls.Add(img);
代码未经过测试。只关注这个想法。你可以这样做,或者使用repeater
,或者你自己的方式,它取决于你。
如果您发现不清楚的事情,请随时问我:)
答案 3 :(得分:1)
您也可以使用控件根据需要使用自定义样式显示图像
答案 4 :(得分:1)
1)很明显,您无法将多个图像显示在单个HTML对象中。
您必须使用Repeater
,GridView
或DataGrid
或动态HTML生成,具体取决于您希望如何在页面上显示它(即HTML设计)
2)正确关注ASP.NET页面生命周期事件(在您完成初始化PageLoad()
,Repeater
或{{1}时,您可以在Gridview
事件中编写代码})
3)你也可以播放视频,但为此你需要一些播放器,它不会那么简单(你可以使用第三方工具)
答案 5 :(得分:0)
我修改了您的代码以使其正常工作。而是在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();
}
}
}
答案 6 :(得分:-3)