Я хочу вызывать изображения из базы данных в ASP: repeater control, но я получаю систему

#c# #asp.net #repeater

#c# #asp.net #повторитель

Вопрос:

Это мой код в aspx-файле

 cnn.Open();
    SqlDataAdapter da1 = new SqlDataAdapter("select * from carousel", cnn);
    DataTable dt1 = new DataTable();
    da1.Fill(dt1);
    Rp1.DataSource = dt1;
    Rp1.DataBind();
cnn.Close();
  

и это repeater

 <asp:Repeater id="Rp1" runat="server">
        <ItemTemplate>
        <div class="item">
            <asp:Image ID="Image1" ImageUrl='<%# Eval("image") %>' runat="server" />
        </div>
        </ItemTemplate>
        <footertemplate></footertemplate>
</asp:Repeater>
  

Я перепробовал все, но я получаю результат каждый раз, когда мне действительно нужна помощь в этом, я новичок в ASP.Net

Комментарии:

1. проверьте это aspsnippets.com/Articles/… вы также можете создать для этого какой-нибудь обработчик ashx

Ответ №1:

Это потому, что значение, поступающее из базы данных, представляет собой массив байтов, представляющий фактические данные изображения. В то время как src из img тега ожидается URL-адрес изображения. По сути, есть два способа сделать это…

  1. Создайте отдельную страницу (или предпочтительно обработчик ASHX), которая возвращает только данные для изображения (без HTML или чего-либо подобного) и ссылку на эту страницу.
  2. Base-64 кодирует массив байтов и включает его в качестве URI данных в src атрибуте.

В Интернете есть много руководств по первому варианту. Это было найдено быстрым поиском в Google, есть и другие. По сути, обработчик должен был бы принять идентификатор в строке запроса, использовать этот идентификатор для получения изображения из базы данных, затем записать соответствующие заголовки и содержимое в ответ. Тогда URL для src атрибута будет этим обработчиком. Что-то вроде:

 ImageUrl='<# "~/handler.ashx?id="   Eval("id") #>'
  

(Или что угодно, что ваши привязанные к данным данные используют в качестве идентификатора для изображения.)

Комментарии:

1. Я не получил этого, я создал в файле обработчика ASHX, но я не знаю, что написать в нем, чтобы получить изображения из таблицы базы данных. Я видел ваш пример, но это не сильно помогло. Пожалуйста, помогите мне с файлом ASHX.

2. @user1679944: По сути, код в вашем обработчике ASHX будет делать то же самое, что делал ваш исходный код … извлекать изображение из базы данных. Но вместо того, чтобы пытаться установить это изображение в качестве src атрибута для img элемента, он просто записывает данные изображения непосредственно в ответ. Причина этого в том, что HTML-страница и изображение, на которое ссылается эта страница, являются двумя отдельными запросами. У вас есть страница для первого запроса (HTML-страница), обработчик должен обслуживать второй запрос (изображение).

3. Но теперь у меня возникли проблемы с привязкой данных к repeater из файла ASHX.

4. @user1679944: В файле ASHX нет повторителя или чего-либо общего с повторителем. Он просто возвращает изображение, ничего более. Повторитель на вашей главной странице будет привязывать это ImageUrl свойство к URL обработчика ASHX. Итак, например, если у вас есть 10 записей в repeater, то у вас будет всего 11 запросов. Один на страницу, где повторитель показывает 10 img тегов, каждый с URL-адресом обработчика ASHX (и 10 разными идентификаторами). Это приводит к 10 запросам к обработчику ASHX, по одному для каждого изображения.

5. Это очень хороший ответ, Дэвид. Я думаю, что это проясняет ситуацию (по крайней мере, для меня) с точки зрения того, что запрашивает OP.

Ответ №2:

предположим, что имя столбца вашего изображения в базе данных «ImageName» тогда

Решение 1: если ваше изображение в корневой папке

  <img src='<%#Eval("ImageName")%>' alt="" />

OR



 <asp:Image ID="Image1" ImageUrl='<%#Eval("ImageName")%>' runat="server" />
  

Решение 2: если ваше изображение в папке images

 <img src='<%# "images/"   Eval("ImageName") %>'  alt=""/>
  

или

 <asp:Image ID="Image1" ImageUrl='<%# "images/"   Eval("ImageName") %>' runat="server" />
  

Ваше окончательное решение:

 <asp:Repeater id="Rp1" runat="server">
           <ItemTemplate>
        <div class="item">
<img src='<%#Eval("ImageName")%>' alt="" />
OR
<asp:Image ID="Image1" ImageUrl='<%# "images/"   Eval("ImageName") %>' runat="server" />
        </div>
        </ItemTemplate>
        <footertemplate></footertemplate>
</asp:Repeater> 
  

Ответ №3:

Вам нужно преобразовать в URI для HTML-тега IMG:

 <img src="<%# System.Text.Encoding.ASCII.GetString(Eval("bynarydatacolumn")) %>" />
  

или эквивалент.