当我尝试将图片放入图像控制时,我得到全貌

时间:2010-12-23 18:14:39

标签: c# asp.net

我有这个代码将数据库中的图片插入到我的ASP.NET窗体上的ImageControl中:

strConnString = "server=" + Server + ";database=" + DataBase + ";UID=" + UID + ";password=" + PASS + ";";
SqlConnection MyConnection = new SqlConnection(strConnString);
SqlCommand MyCommand = new SqlCommand("SELECT Pic FROM MEN WHERE ID=5", MyConnection);
MyConnection.Open();
SqlDataReader  MyReader = MyCommand.ExecuteReader();
if (MyReader.Read())
{
    byte[] m_MyImage = (byte[])MyReader["Pic"];
    Response.BinaryWrite(m_MyImage);
}

我在表格上有ImageControl

<asp:Image Width="88" Height="100" Runat="server" ID="m_Image" NAME="m_Image" />

但是当我运行代码时,我会在屏幕上看到图片大而不是ImageControl

我也把它放在form_load中:

m_Image.ImageUrl = "MyPhoneBook.aspx?m_Image";

my control is: m_Image
my control ID is: m_Image
my namespace is MyPhoneBook

但仍然无法正常工作

我做错了什么?

由于

3 个答案:

答案 0 :(得分:1)

您正在将图像数据直接写入响应流:

Response.BinaryWrite(m_MyImage);

这导致浏览器只获取图像,而不是任何HTML。

此外,图像控件采用URL到图像,而不是二进制内容,因此这种方法不起作用。


要执行我认为您想要实现的目标(将数据从数据库获取到页面而不执行任何磁盘IO),您可以执行以下操作:

  • 在自己的页面中使用上面的代码,该代码仅提供图像。或者,为可以执行此操作的图像写一个HTTP Handler
  • 将图像控件ImageUrl设置为此页面。

您可以通过将图像ID传递给查询字符串上的图像页面/处理程序(类似image.aspx?img_id=1

来进一步实现此目的。

答案 1 :(得分:0)

您如何引用页面上的图像?提供的图像控制标记似乎没有任何类型的图像引用,并且代码提供它只是将图像直接写入响应。什么是最终的HTML?

如果我根据这段代码猜测,我会说你用二进制图像响应来破坏HTML响应,所以你只看到后者。这两者需要分成他们自己的请求/回复。

答案 2 :(得分:0)

您需要创建一个单独的ASHX处理程序,以现在的方式呈现图像,然后将<asp:Image>的URL设置为指向该ASHX。