1

このページにFrm_MngAddGoodsGrp.aspxページがあります。「OpenDialog.aspx」というページを参照するiframeタグがあります。

このページは私のプロジェクトにあり、ダイアログファイルを開いてユーザーに画像をプレビューするために作成しました。 「ImageRequestHandler.ashx」は、画像コントロール「ImgPrv」の src 属性を「ImageRequestHandler.ashx」に変更して画像をプレビューします。ユーザーはファイルを開いて、保存ボタンをコミットする前にプレビューできます
。画像ファイルのデータをバイト配列で保存し、このバイト配列を db に保存するのは、ユーザーが新しいデータを DB に挿入したいときです。


しかし、私の問題は、ユーザーが以前にデータベースに保存されたデータを見たいと思っていることです
Frm_MngAddGoodsGrp.aspx に radgrid があり、ユーザーが radgrid の行をクリックすると、IFRAME 内の画像が db から適切な画像に変更され、db から

画像のバイト配列を読み取ることができますが、設定方法がわかりませんそれを画像に追加して、httphandlerが動作するセッション変数を設定することもできますが、Iframeタグ内の画像のimageUrlを設定する方法がわかりません。

また、ページ内の単純な画像コントロールでそれを行いましたが、iframe内の画像を変更したいのですが、可能かどうか>可能であればどうすればよいですか.....

私のaspxファイルでFrm_MngAddGoodsGrp.aspx

<iframe id ="OpenDialogControl" runat="server"
 src = "OpenDialog.aspx" frameborder="0"  name="Iframe1"  
 scrolling="no" height="110px" width="100px"></iframe>

コード ビハインド Frm_MngAddGoodsGrp.aspx

 byte[] SelectedImage;
 SelectedImage = (byte[])(ImageArray.Rows[selectedReceiptIndex][8]); //Image Array ->Grid Data table
 Session["SessionImage"] = SelectedImage;
 Random random = new Random();
 ShowImage0.ImageUrl = Page.ResolveClientUrl("~/ImageRequestHandler.ashx?randomno="+ random.Next(0,1000).ToString());

        //I have tried following codes to access ImagePrv Element in Iframe1 but i couldn't
        //var image = OpenDialogControl.FindControl("ImagePrv") as Image;


私のaspxファイルで Opendialog

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript" >
        function getRandomNumber() {
            var randomnumber = Math.random(10000);
            return randomnumber;
        }

        function OnClientAsyncFileUploadComplete(sender, args) {
            var handlerPage = '<%= Page.ResolveClientUrl("~/ImageRequestHandler.ashx")%>';
            var queryString = '?randomno=' + getRandomNumber();
            var src = handlerPage + queryString;
            var clientId = 'ImagePrv';
            document.getElementById(clientId).setAttribute("src", src);
        }
        function showName(object) {

            document.write(object.id);
        }
    </script>

</head>
<body style= "margin-top:0px; margin-left:0px; padding-left:0px; padding-top:0px; ">
    <form id="form1" runat="server" style= "margin-top:0px; margin-left:0px; padding-left:0px; padding-top:0px; ">
    <div style= "margin-top:0px; margin-left:0px; padding-left:0px; padding-top:0px; ">
        <img alt="" src="" id ="ImagePrv" runat="server"
            style= "margin-top:0px; margin-left:0px; padding-left:0px; padding-top:0px; height: 120px; width: 110px;"/> </div>
            <br /><br /><br />
    <div style= "visibility:visible">
        <cc1:AsyncFileUpload ID="AsyncFileUpload1" runat="server" 
            onuploadedcomplete="AsyncFileUpload1_UploadedComplete" ThrobberID="tid1" 
            onclientuploadcomplete="OnClientAsyncFileUploadComplete" />
    </div>
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    </form>
</body>
</html>

開いているダイアログ コード ビハインドで

 public partial class OpenDialog : System.Web.UI.Page
    {

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    public static readonly string STORED_IMAGE = "SessionImage";
    protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
    {
        if (AsyncFileUpload1.PostedFile != null)
        {
            HttpPostedFile file = AsyncFileUpload1.PostedFile;

            byte[] data = ReadFile(file);
            Session[STORED_IMAGE] = data;
        }
    }
    private byte[] ReadFile(HttpPostedFile file)
    {
        byte[] data = new Byte[file.ContentLength];
        file.InputStream.Read(data, 0, file.ContentLength);
        return data;

    }

}


私は ImageRequestHandler.ashx という名前の httphandler を持っています

ImageRequestHandler.ashx の背後にあるコード

public class ImageRequestHandler : IHttpHandler, IRequiresSessionState
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.Clear();

           if (context.Request.QueryString.Count != 0)
            //if (context.Request.Cookies.Count != 0)
            {
                var storedImage = context.Session[OpenDialog.STORED_IMAGE] as byte[];
                if (storedImage != null)
                {
                    Image image = GetImage(storedImage);
                    if (image != null)
                    {
                        context.Response.ContentType = "image/jpeg";
                        image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
                    }
                }
            }
        }

        private Image GetImage(byte[] storedImage)
        {
            var stream = new MemoryStream(storedImage);
            return Image.FromStream(stream);
        }

        public bool IsReusable
        {
            get { return false; }
        }
    }

javascriptで解決策があれば、document.getelemeを試してみましたが、うまくいきません!!
前もって感謝します

4

1 に答える 1

1

iframeがFrm_MngAddGoodsGrp.aspxに埋め込まれている場合でも、Frm_MngAddGoodsGrp.aspxとOpenDialog.aspxを別々のページ(これらは)と考える必要があります。あるページに表示される内容を別のコードビハインドから直接変更することはできません。

とはいえ、iframeをホストしているページがiframeでホストされているページと通信する方法はいくつかあります。

  1. ページが同じアプリケーションからのものである場合、それらはセッション状態を共有できます。親ページのセッションに何か(画像IDなど)を入れて、子ページにアクセスさせることができます。
  2. iframeのsrc属性は親ページで設定できるため、クエリ文字列の値を子ページに渡すことができます。
  3. iframeを強制的にリロードして、子ページにそのライフサイクルを強制的に実行させることができます。セッション状態または子ページのクエリ文字列で値を変更した場合は、それらに再度アクセスできます。

親ページが新しい画像のIDを知っていると仮定すると、iFrameのsrc属性をに設定し、OpenDialog.aspx?imageId=12345OpenDialog.aspxにクエリ文字列から値を取得させ、それを使用しImageUrlて画像コントロールのプロパティを設定します。

于 2012-09-18T14:23:27.487 に答える