【问题标题】:Show Image on repeater control在中继器控件上显示图像
【发布时间】:2011-10-07 16:06:35
【问题描述】:

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

类别表格

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>

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

【问题讨论】:

  • 您正在尝试将二进制数据输出到页面上。对于要在 HTML 中显示的图像,您需要 由于该图像是二进制数据,您可能必须设置一个处理程序来提供该图像数据,然后指向源中的处理程序。

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


【解决方案1】:

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

MSDN on image data type:

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

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

处理程序伪代码如下:(然后在 ASPX 中只需引用处理程序)

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);

我发现的好例子:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 2014-11-06
    • 2017-02-18
    相关资源
    最近更新 更多