#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-адрес изображения. По сути, есть два способа сделать это…
- Создайте отдельную страницу (или предпочтительно обработчик ASHX), которая возвращает только данные для изображения (без HTML или чего-либо подобного) и ссылку на эту страницу.
- 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 запросов. Один на страницу, где повторитель показывает 10img
тегов, каждый с 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")) %>" />
или эквивалент.