Response.Write输出问题

时间:2011-03-14 18:09:08

标签: c# .net asp.net response.write

我无法弄清楚为什么当我尝试输出图像和下面的一行文字时,我只得到图像我做错了什么?

        SqlConnection cn = new SqlConnection("CONNECTIONINFO HERE");

        SqlCommand cmd = new SqlCommand("SELECT * FROM test WHERE id=" + Request.QueryString["id"], cn);

        cn.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read()) //check to see if image was found
        {
            Response.ContentType = dr["fileType"].ToString();
            Response.BinaryWrite((byte[])dr["imagesmall"]);
            Response.Write("<br/>This is your image, if this is incorrect please contact the administrator.");
        }
        cn.Close();

5 个答案:

答案 0 :(得分:4)

嗯..内容类型可能设置为jpg,gif或其他图像类型。我真的很惊讶浏览器显示图像而不是错误。

重点是,你不能混合响应类型。

如果您必须显示文字,则需要发出常规HTML文件,图片标记显示您的图片以及底部的相关文字。

答案 1 :(得分:3)

您正在将内容类型设置为二进制图像类型。浏览器很可能忽略了文本。如果您希望在响应中同时使用这两种类型,则可能需要使用 text / html 作为响应类型,并使用<img>标记执行内联图像数据。

有关内联图片数据的示例,请参阅here

答案 2 :(得分:1)

您不能将二进制响应与html内容响应混合使用。如果您“保存”您的图像,您会在十六进制编辑器中注意到它是二进制图像数据,并且您的小剪切html附加到文件的末尾。

答案 3 :(得分:1)

为您的图片创建一个HttpHandler,并从图片标记中调用它。

像这样:

public class ImageHandler : IHttpHandler
{
    public bool IsReusable 
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        HttpRequest request = context.Request;
        HttpResponse response = context.Response;

        SqlConnection cn = new SqlConnection("CONNECTIONINFO HERE");
        SqlCommand cmd = new SqlCommand("SELECT * FROM test WHERE id=" + request.QueryString["id"], cn);

        cn.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read()) //check to see if image was found
        {
            response.ContentType = dr["fileType"].ToString();
            response.BinaryWrite((byte[])dr["imagesmall"]);
        }
        cn.Close();
    }
}

然后像这样使用它:

<img src="/ImageHandler.axd?id=1" />
<p>This is your image, if this is incorrect please contact the administrator.</p>

如果您正在使用,则需要在web.config或IIS 7中配置处理程序。

以下是:http://mvolo.com/blogs/serverside/archive/2007/08/15/Developing-IIS7-web-server-features-with-the-.NET-framework.aspx

答案 4 :(得分:0)

您没有说出ContentType的设置。如果它设置为'jpeg'或类似,那么您输出的HTML将不会被解释为HTML - 它只是更多的二进制数据。