Подтвердить что ты не робот

Выберите все изображения, используя 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;?>
4b9b3361

Ответ 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

Я добавил несколько снимков экрана, надеюсь, вы сможете продолжить здесь.

введите описание изображения здесь

введите описание изображения здесь