このページに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を試してみましたが、うまくいきません!!
前もって感謝します