2

DataListコントロールにいくつかの画像を表示するために呼び出されるメソッドを含むWebページがあります

MyImage.cs

class MyImage
{
    string Name { get; set; }
    byte[] Jpeg { get; set; } 
}

MyImages.aspx.cs

public void DisplayMyImages(IEnumerable<MyImage> myImages)
{
    this.myImagesDataList.DataSource = myImages;
    this.myImagesDataList.DataBind();  
}

/// ...

protected void myImagesDataList_ItemDataBound(object sender, DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item ||
        e.Item.ItemType == ListItemType.AlternatingItem)
    {
        MyImage myImage = (MyImage)e.Item.DataItem;
        Image myImageImage = (Image)e.Item.FindControl("myImageImage");

        // How to pass myImage.Jpeg to ImageHandler? form here

        myImageImage.ImageUrl = "~/Handlers/ImageHandler.ashx";
    }
}

ImageHandlerしかし、データベースからすでに抽出されてDisplayMyImages()関数に渡されている場合、 jpeg画像を渡すにはどうすればよいですか?

備考:

それらをファイルに保存して、クエリ文字列のパスをに渡したくないImageHandler

モデルビュープレゼンターアプローチに違反したくないため、標準のクエリ文字列アプローチを使用することはできません。

4

4 に答える 4

1

通常、画像はImageHandlerに渡されずに生成されるはずなので、ロジックを反転するだけです。あなたはこのようなものになってしまうでしょう:

myImageImage.ImageUrl = "~/Handlers/ImageHandler.aspx?id=yourImageId";

次のように、正しいコンテンツタイプを設定していることを確認してください。

context.Response.ContentType = "image/png";

そして、これはあなたが応答にあなたのイメージを書く方法です:

byte[] fileData = null;
//TODO: load your image data into fileData!
context.Response.BinaryWrite(fileData);
于 2012-10-22T14:25:17.560 に答える
1

CodeProjectであなたの質問に答えたところですが、ここにも答えをコピーします。

画像の大きさやサポートする必要のあるブラウザによっては、データURIを使用できる場合があります。

myImageImage.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(myImage.Jpeg);

(IE8を使用している場合は、32Kbに制限されています。以前のバージョンのIEはまったくサポートされていません。)

于 2012-10-22T17:11:27.700 に答える
0

画像のIDを渡し、必要に応じてDBから直接取得し、;と同様のコードを使用する方がはるかに簡単です。

var data = //Code to retrieve byte[];

int len = data.Length;
response.ContentType = "image/png";
response.BinaryWrite(data);
于 2012-10-22T14:27:56.917 に答える
0

まず第一に、私はあなたが間違っているかもしれないと思います

myImageImage.ImageUrl = "~/Handlers/ImageHandler.aspx";    

.ashx注:ファイルではなくImageHandlerファイルを含める必要があり.aspxます。.ashx Generic Handlerこれは、ImageHandlerから画像を取得するときに、コンテキスト上で画像として機能します。これがImageHandlerファイルの正しい形式です。

imgProfile.ImageUrl = "ImageHandler.ashx?imgid=" + imageId.ToString();

完全な参照を表示するには、ここをクリックしてください。

願っています、それはあなたを助けるかもしれません。!!

于 2012-10-22T15:34:11.733 に答える