我们需要为每个图像创建一个HttpHandler(ashx)吗?

时间:2012-02-17 05:33:56

标签: asp.net

在我的页面中,我试图显示两个具有相同ID的图像。为此,我有两个图像控件(imgX,imgY)。要将图像写入图像控件,我使用的是HttpHandler(ashx)。

我的问题是我在两个控件上都有相同的图像(imgX,imgY)

在页面加载事件中,这是我的代码:

imgPhoto.ImageUrl = "Image.ashx?EmpBadge=" & Session("EmpBadge")
imgSign.ImageUrl = "Image.ashx?EmpBadge=" & Session("EmpBadge")

在ashx中:

  Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        Try
            Dim imageId As String = context.Request.QueryString("EmpBadge")
            Dim drPhoto As SqlDataReader
            Dim param(1) As SqlParameter
            param(1) = New SqlParameter("@EmpBadge", imageId)
            drPhoto = IMSIndia.ExecuteReaderWithParam("SpGetPhotoAndSignature", param)
            If drPhoto.HasRows Then
                While drPhoto.Read()
                    context.Response.ContentType = "image/" & drPhoto("PhotoType")
                    context.Response.BinaryWrite(DirectCast(drPhoto("Photo"), Byte()))
                    context.Response.ContentType = "image/" & drPhoto("Signaturetype")
                    context.Response.BinaryWrite(DirectCast(drPhoto("Signature"), Byte()))
                End While
            End If
        Catch ex As Exception

        Finally
            If IMSIndia.con.State = ConnectionState.Open Then
                IMSIndia.ConnectionClose()
            End If
        End Try
    End Sub

感谢。

2 个答案:

答案 0 :(得分:1)

嗯... 当然你们每个人都得到相同的图像;您为每个传递完全相同的URL。您对两者使用相同的Session值。

然后,在您的代码中,您似乎尝试在同一响应中发送两个图像。这根本没有意义,我不确定它是否与这个问题有关。

您需要根据QueryString值区分图像。除非你这样做,否则你的经纪人无法区分。

答案 1 :(得分:1)

你应该改变你的代码。

在Page_Load

imgPhoto.ImageUrl = "Image.ashx?ImageType=photo&EmpBadge=" & Session("EmpBadge")
imgSign.ImageUrl = "Image.ashx?ImageType=signature&EmpBadge=" & Session("EmpBadge")

while内的ProcessRequest循环内,放置一个if-else,就像这样。

If drPhoto.HasRows Then
    While drPhoto.Read()
        If context.Request.QueryString("ImageType") = "photo" Then
            context.Response.ContentType = "image/" & drPhoto("PhotoType")
            context.Response.BinaryWrite(DirectCast(drPhoto("Photo"), Byte()))
        Else
            context.Response.ContentType = "image/" & drPhoto("Signaturetype")
            context.Response.BinaryWrite(DirectCast(drPhoto("Signature"), Byte()))
        End If
    End While
End If