我想要显示多个图像。图像数量因输入而异。我能够在屏幕上看到破碎的图像。在控制台中,显示ERR_INVALID_URL。请让我知道我错在哪里。
以下是我的 aspx代码
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:Image ID="Image3" runat="server"
ImageUrl="data:image/jpg;base64,<%# ((view_data)Container.DataItem).image%>" />
</ItemTemplate>
</asp:Repeater>
cs代码
foreach (DataRow row in dt.Rows)
{
Byte[] bytes = (Byte[])row["image"];
viewDataList.Add(new view_data { image = Convert.ToBase64String(bytes)});
}
Repeater1.DataSource = viewDataList;
Repeater1.DataBind();
我从数据库中获取图像。这是正确的方法。请建议
更新..
我已将图片标记更改为以下内容。现在有4张图片需要显示出来,我可以看到1张图片,其余3张图片被打破..请提示
<img src="data:image/jpg;base64,<%# ((view_data)Container.DataItem).image%>" />
答案 0 :(得分:0)
以您的要求尝试这种方式。如果您在完成以下方法后遇到任何问题,请与我们联系。
注意:我尝试使用单独的列名作为图像ID。如果您在数据库中拥有它,那么继续执行此操作会更有用。否则,您将Image直接传递给转发器并将其传递给ImageHandler.ashx
HTML页面
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:Image ID="Image3" runat="server" ImageUrl='<%# "ImageHandler.ashx?ImID="+ Eval("ImageID") %>' Height="150px" Width="150px"/>
</ItemTemplate>
CS代码:
点击您的点击事件:
SqlConnection connection = new SqlConnection(strcon);
SqlCommand command = new SqlCommand("SELECT imagename,ImageID from [Image]",connection);
SqlDataAdapter daimages = new SqlDataAdapter(command);
DataTable dt = new DataTable();
daimages.Fill(dt);
Repeater1.DataSource = dt;
Repeater1.DataBind();
ImageHandler.ashx
完成上述代码后,我们需要将HTTPHandler文件添加到我们的项目中以从数据库中检索图像,因为我们以二进制格式保存图像,从数据库中获取数据的二进制格式很容易,但显示非常困难,这就是我们将使用的原因HTTPHandler解决了这个问题。
这里HTTPHandler是一个简单的类,允许您处理请求并返回对浏览器的响应。我们可以说Handler负责完成浏览器的请求。它一次只能处理一个请求,从而提供高性能。
右键单击您的项目,添加新的HTTPHandler.ashx文件,并将名称命名为ImageHandler.ashx,并在pagerequest方法中编写以下代码,如下所示
string strcon =ConfigurationManager.AppSettings["ConnectionString"].ToString();
public void ProcessRequest(HttpContext context)
{
string imageid = context.Request.QueryString["ImID"];
SqlConnection connection = new SqlConnection(strcon);
connection.Open();
SqlCommand command = new SqlCommand("select Image from Image where ImageID="+ imageid, connection);
SqlDataReader dr = command.ExecuteReader();
dr.Read();
context.Response.BinaryWrite((Byte[])dr[0]);
connection.Close();
context.Response.End();
}
这里不要忘记在web.config文件中设置连接字符串我从web.config文件获取数据库连接因此你需要在web.config文件中设置connectionstring这样
<connectionStrings>
<add name="dbconnection" connectionString="DataSource=Yourservername;Integrated Security=true;InitialCatalog=Your databasename"/>
</connectionStrings>
答案 1 :(得分:0)
将图片标记更改为以下版本对我有用..
<img src="data:image/jpg;base64,<%# ((view_data)Container.DataItem).image%>" />
感谢您的回复
答案 2 :(得分:-1)
没有必要预先在转发器中绑定数据,您可以直接将DataTable指定给转发器控件
DataTable dt=new DataTable();
dt=cmd.ExecuteNonQuery();
Repeater1.DataSource = dt;
Repeater1.DataBind();
你可以放置这一行
<asp:Image ID="Image3" runat="server"
ImageUrl='<%#Bind("image")%>' />
而不是
<asp:Image ID="Image3" runat="server"
ImageUrl="data:image/jpg;base64,<%# ((view_data)Container.DataItem).image%>" />