1

aspx で 1 つのイメージ コントロールを作成しました。コードは次のとおりです。

<div>
    <div class="ajaxdata">
        <asp:Image ID="image2" runat="server"></asp:Image>
    </div>
    <a class="ajaxcall">click to see image </a>
</div>

次に、通常のボタンクリックの場合、ハンドラーを使用して以下のように画像を動的に取得しています

public void ProcessRequest(HttpContext context)
    {
        context.Response.Clear();

        if (!String.IsNullOrEmpty(context.Request.QueryString["id"]))
        {
            int id = Int32.Parse(context.Request.QueryString["id"]);

            // Now you have the id, do what you want with it, to get the right image
            // More than likely, just pass it to the method, that builds the image
            Image image = GetImage(id);

            // Of course set this to whatever your format is of the image
            context.Response.ContentType = "image/jpeg";
            // Save the image to the OutputStream
            image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
        }
        else
        {
            context.Response.ContentType = "text/html";
            context.Response.Write("<p>Need a valid id</p>");
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
    private Image GetImage(int id)
    {
        string path = string.Empty;
        SqlConnection con = new System.Data.SqlClient.SqlConnection();
        con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename='C:\Users\1483\Documents\Visual Studio 2010\Projects\WebApplication2\WebApplication2\App_Data\Database1.mdf';Integrated Security=True;Connect Timeout=30;User Instance=True";
        con.Open();
        SqlCommand cmd = new SqlCommand(@"SELECT Path FROM Temp WHERE Id=@idparam", con);
        SqlParameter idparam = cmd.Parameters.Add("@idparam", SqlDbType.NVarChar,10);
        idparam.Value = id.ToString();
        SqlDataReader rd = cmd.ExecuteReader();
        if (rd.Read())
        {
             path = rd.GetString(0);
        }
        byte[] data= File.ReadAllBytes(path);
        MemoryStream stream = new MemoryStream(data);
        return Image.FromStream(stream);
    }

そしてボタンクリックのC#コードは

image2.ImageUrl = "Handler1.ashx?id=" + txtid.Text;

これはすべて完全に機能するようになりました。ajax呼び出しで画像をフェッチし、同じハンドラーを使用して画像コントロールに割り当てたいので、以下のようにajax呼び出しを書きました

$('.ajaxcall').click(function () {
            var id = $('#txtid').val();
            var data = 'id=' + id;
            $.ajax({
                type: "GET",
                cache: false,
                url: "Handler1.ashx",
                data: data,    // multiple data sent using ajax
                success: function (html) {
                    $('#image2').val(html);  
                    //This where i need to assign the image stream to the image control i don't know how to do it.                     
                }
            });
            return false;
        });

必要なデータを送信し、データベースから画像を取得して送り返していますが、画像コントロールに割り当てることができません.上記のように割り当てたところ、データであると推測されるすべてのシンボルが表示されますが、画像形式で表現する方法ヘルプまたは回避策は素晴らしいです

前もって感謝します。

4

1 に答える 1

1

1つの回避策がうまくいくことを知っています。これを行うだけで、ajax呼び出しを使用する必要はありません。

 $('.ajaxcall').click(function () {
 var id = $('#txtid').val();
 var data = 'id=' + id;
 var imageurl = 'Handler1.ashx?' + data;
 $('#image2').attr('src', imageurl);
 });

これであなたのイメージが得られます

于 2013-09-18T07:56:48.177 に答える