Выберите все изображения, используя Asp.Net С#
Я новичок в ASP.NET и С#. Я пытаюсь извлечь все изображения из папки и показать их на странице, но это только выбор одного изображения.
Мой код ASP.NET:
<form id="form1" runat="server" class="col-lg-5">
<asp:Image ID="Image" runat="server" />
</form>
Мой код С#:
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;?>
Ответы
Ответ 1
В коде ниже напишите свой метод Collection()
для получения изображений как List
of 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() %>' 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 в форму.
Image img = new Image();
img.ImageUrl = dr["Image_Path"].ToString();
img.AlternateText = "Test image";
form1.Controls.Add(img);
Ответ 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(в вашем случае вы можете написать код в событии PageLoad()
после завершения инициализации Repeater
, GridView
или DataGrid
)
3) Вы также можете показывать видеоролики, но для этого вам нужен какой-то игрок, это будет не так просто (вы можете использовать сторонние инструменты)
Ответ 6
Я изменил ваш код, чтобы он работал. Вместо определения изображения в aspx добавьте его динамически из вашего кода.
Измененный код ASP.NET:
<form id="form1" runat="server" class="col-lg-5">
</form>
Измененный код С#:
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();
}
}
}
Ответ 7
Я добавил несколько снимков экрана, надеюсь, вы сможете продолжить здесь.
![введите описание изображения здесь]()
![введите описание изображения здесь]()