9

这是我的代码,它所做的只是清除网页并绘制图像,因此表单的其余部分消失了!我需要在表单中显示图像。

这是我的用户控件来显示图像:

protected void Page_Load(object sender, EventArgs e)
    {

        if (Session["ObjHoteles"] == null)
        {
            Label1.Text = "Por favor, primero seleccione un hotel para desplegar las fotos.";
        }
        else
        {
            if (!IsPostBack)
            {
                List<Byte[]> ArrayFotos = new List<Byte[]>();
                string NombreDelHotel = "";

                Hoteles Hotel1 = (Hoteles)Session["ObjHoteles"];
                NombreDelHotel = Hotel1.NombreHotel;

                ArrayFotos = Persistencia.PersistenciaFotos.FotosDeHotel(NombreDelHotel);
                Session["CantFotos"] = ArrayFotos.Count();

                Byte[] Foto = ArrayFotos[0];

                Response.Buffer = true;
                Response.Clear();
                Response.ContentType = "image/jpeg";
                Response.Expires = 0;
                Response.BinaryWrite(Foto);
                Session["NumFoto"] = 0;
            }
            else
            {
                List<Byte[]> ArrayFotos = new List<Byte[]>();
                string NombreDelHotel = "";

                Hoteles Hotel1 = (Hoteles)Session["ObjHoteles"];
                NombreDelHotel = Hotel1.NombreHotel;

                ArrayFotos = Persistencia.PersistenciaFotos.FotosDeHotel(NombreDelHotel);
                Session["CantFotos"] = ArrayFotos.Count();

                Byte[] Foto = ArrayFotos[(int)Session["NumFoto"]];

                Response.Buffer = true;
                Response.Clear();
                Response.ContentType = "image/jpeg";
                Response.Expires = 0;
                Response.BinaryWrite(Foto);

            }
        }

我需要找到一种不会清除所有页面的方法,只需在用户控件中绘制图像即可。

4

3 回答 3

14

您可以编写一个页面 .aspx 或一个处理程序(可能是 .ashx),将图片的内容发送回浏览器。您可以在 url 中传递信息。然后使用带有 html 标记或 html 控件的该页面的 url 来显示它。

编辑:您需要使用控件。您可以将二进制数据转换为 base64 并将内容输出到 html 页面。

我给你一个带有 img html 标签的例子:

<img alt="" src="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAsMAAAGhCAIAAAALOi7ZAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QgLEhM6PUSGrwAAIABJREFUeNq8vcuSLEmWHKZ6jnlEZt5761Z3T/eAHAICAYRcEALsuOCWPzbzDfwP/gKXWJACoRDCBSkEBgPhADKY7qnu+4wIdztHuThmHh55q2t6ho+SlpaqyMwID3ez89CjqsY//dM//bM/+zMc/pGE3//PT/z09/1I0t/1Rz/x+o9+0I++vv/n8fU/8MW/9U9+9JVvL/v/u1cy86cv5ttfePXKq//8fTfhp+/qT3/oq8v+6V/+Ay/v25/+4X/46nqO"/>

您还可以对带有 CSS 的图像使用 base64 编码:

background-image: url(data:image/jpeg;base64,IVB)

要从 C# 转换为 base64,您可以使用:

using System;

和:

Convert.ToBase64String(Foto);
于 2013-08-11T22:40:39.653 回答
14

还有一种简单的方法:

  1. 在您的.aspx页面上:

    <asp:Image id="Image1" runat="server"></asp:Image>
    
  2. 然后在您的 CodeBehind 文件中.aspx.cs

    Image1.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(Foto)
    
于 2014-04-21T11:18:35.940 回答
3

Response.Clear();正在删除所有缓冲的内容(即页面中的所有内容)。

考虑一个 HTTP 处理程序 ( ),而不是显示动态图像的用户控件.ashx,如下所示:

ImageHandler.ashx:

public class ImageHandler : System.Web.IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        // Logic to get byte array here
        byte[] buffer = WhateverLogicNeeded;
        context.Response.ContentType = "image/jpeg";
        context.Response.OutputStream.Write(buffer, 0, buffer.Length);
    }

    public bool IsReusable
    {
        get { return false; }
    }
}

然后在您的.aspx页面中:

<asp:Image ID="image1" runat="server" ImageUrl="~/ImageHandler.ashx" />

注意:如果您想要特定的图像,则可以将查询字符串(即图像 ID)传递给处理程序,并让字节数组逻辑说明使用查询字符串值。

于 2013-08-11T22:39:00.353 回答