在转发器控件上显示图像

时间:2011-10-07 16:06:36

标签: c# .net asp.net linq repeater

使用C#ASP.NET。我有转发器控件的问题。我想在存储在数据库中的页面上显示图像。我从northwind数据库收集信息。

类别

SQL语法:

CREATE TABLE [dbo].[Categories](
    [CategoryID] [int] IDENTITY(1,1) NOT NULL,
    [CategoryName] [nvarchar](15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [Description] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
    [Picture] [image] NULL)

在页面加载 C#语法:

 NorthWindDataContext db = new NorthWindDataContext();
            List<Category> oList = new List<Category>();
            oList = db.Categories.ToList();
            Repeater1.DataSource = oList;

aspx语法:

 <ItemTemplate>
            <tr>
                <td>
                   <%#DataBinder.Eval(Container, "DataItem.Picture")%>
                </td>

            </tr>
        </ItemTemplate>

运行代码后,在我的页面中我没有得到图片。帮助我在我的页面上获取图片。提前谢谢。如果有任何疑问请问。

1 个答案:

答案 0 :(得分:2)

您将图像存储为数据库中的二进制数据,因此无法按原样显示。

MSDN on image data type:

  

从0到2 ^ 31-1(2,147,483,647)的可变长度二进制数据   字节。

常见的方法是从内存流中创建System.Drawing.Image的实例,然后在响应中显式写入它。此功能应由ASHX处理程序包装。有关示例,请参阅intrawebs,有很多。

下面的Handler伪代码:(然后在ASPX中只是reffer处理程序)

IEnuemrable<byte> binaryImageData = queryExecutor.GetImageData(imageId);

// do not forget to dispose or use 'using'
var memoryStream = new MemoryStream(); 
memoryStream.Write(imageByte, 0, binaryImageData.Length);
System.Drawing.Image image = System.Drawing.Image.FromStream(memoryStream);

// ... create JPEG

context.Response.ContentType = "image/jpeg";
jpegImage.Save(context.Response.OutputStream, 
               System.Drawing.Imaging.ImageFormat.Jpeg);

我发现的好例子: