在转发器代码

时间:2015-07-08 04:06:48

标签: c# asp.net sql-server

我想要显示多个图像。图像数量因输入而异。我能够在屏幕上看到破碎的图像。在控制台中,显示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%>" />

3 个答案:

答案 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>

来源:Retrieve Image from database

答案 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%>" />