0

私は単純な画像タグ付けおよび検索アプリに取り組んでいます。画像を DB にアップロードし、タグを適用しましたが、それらを引き戻すと失敗します - 画像がレンダリングされません。

SOでこれを見つけましが、動作させることができません。

おそらくハンドラーを誤解していると思います。

つまり、コード ビハインドでは、ASP:Image を作成し、その imageurl を写真の ID を持つハンドラーに設定してから、そのコントロールを ASP:Placeholder に追加しています。

ページがレンダリングされると、IE では小さな赤い x 画像が表示されず、FF では何も表示されません。

何かが足りないと思わせる原因の 1 つは、ハンドラー コードのブレークポイントがヒットしないことです。そのため、実行されることさえあります。右?

ここで私が間違っていることを知っている人はいますか?ありがとう。

これが私のハンドラーです

Imports aapeClsLib
Imports System.Web
Imports System.Web.Services

Public Class photos
    Implements System.Web.IHttpHandler

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

        Dim img As Byte() = getImage(context.Request.QueryString("ID"))
        context.Response.Clear()
        context.Response.ContentType = "image/jpeg"
        context.Response.BinaryWrite(img)
        context.Response.End()
    End Sub

    ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property


    Private Function getImage(ByVal id As String) As Byte()
        Dim img As Byte()

        Dim strSql As String = "select ph_photo from photos where ph_id = " & id
        Dim dt As DataTable = sqLiteData.getDataTable(strSql)
        img = CType(dt.Rows(0)(0), Byte())

        Return img


    End Function
End Class

プレースホルダーに貼り付けている場所

Private Sub insertPhotos(ByVal dt As DataTable)
     For Each row As DataRow In dt.Rows

         Dim img As New Image
         img.ImageUrl = "photos.ashx?ID=" & row(0)
         PlaceHolder1.Controls.Add(img)

     Next
 End Sub
4

3 に答える 3

1

C# の例ですが、これは私にとっては問題なく機能します。コンテンツの長さヘッダーを追加することをお勧めします。

<%@ WebHandler Language="C#" Class="Photo" %>

using System;
using System.Web;

public class Photo : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "image/jpeg";
        context.Response.BinaryWrite(System.IO.File.ReadAllBytes("C:\\Test.jpg"));
        context.Response.AddHeader("Content-Length", new System.IO.FileInfo("C:\\Test.jpg").Length.ToString());
    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}

基本的に、最初に簡単なテストを行うだけです。それが機能する場合は、データベースから返されるデータであることをお勧めします。

于 2009-08-30T13:26:44.140 に答える
1

web.config にハンドラーを登録していないか、IIS に拡張機能を登録していないようです。詳細については、こちらこちらを参照してください。

編集:拡張子として .ashx を使用していることがわかったので、通常は登録する必要はありません。主な手がかりは、web.config でのハンドラーの登録です。

于 2009-08-29T13:17:05.873 に答える