2

私のページには、4つのImageButtonを持つ別のページを指すsrcを持つIFRAMEタグと、画像をロードするためのAsyncFileUpload(AFU)を含むDIVを開くModalPopupExtenderがあります。

ユーザーがImageButtonをクリックするたびに、ModalPopupExtenderはAFUコントロールを使用してDIVを開き、ユーザーは画像を選択してから、Imagebuttonが選択された画像のImageURLを取得します。

evrythingをアップロードする画像を初めて選択すると、画像が保存され、ImageButtonが正しいImageURLを取得し、制御が呼び出し元のページ(IFRAMEタグが付いているページ)に戻ります。2回目にユーザーがImageButtonをクリックしてModalPopupExtenderを開き、画像を選択してアップロードするときに、ページを開いて、iframedドキュメントをメインドキュメントとして新しいブラウザウィンドウを開きます...

Webで解決策を検索したところ、AFUによってdocument.forms [0] .targetが変更されたため、uploadCompleteイベントでdocument.forms [0] .targetを正しいターゲット(IFRAME id)に復元しようとしました。ただし、iframedドキュメントをメインドキュメントとして、新しいブラウザウィンドウで開きます。

誰でもこれを手伝うことができますか?

4

1 に答える 1

0

ASP.NET AJAX AsyncFileUpload コントロールの設計には既知の問題があります。AsyncFileUpload を IFRAME ページで使用すると、ブラウザーの場所が変更されます。ただし、ツールキットの v3.5.50731.0 と以下のサンプル コードでは、この問題を再現できません。

ImageButton がクリックされたときに問題が発生するため、フォーム ターゲットをリセットする OnClientClick ハンドラを追加する必要があります''。ImageButton は既に IFRAME 内にあるため、(空の文字列) にリセットする必要があります。

以下は、AjaxControlToolkit v3.5.50731.0 では壊れない最小限のサンプルです。

<%@ Page Language="C#" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolKit" %>
<html><body>
<script runat="server">
 int Id = Convert.ToInt32(HttpContext.Current.Request["Id"]);
</script>
<form runat="server">
<ajaxToolKit:ToolkitScriptManager runat="server" />
<h1>IFRAME <%= Id %></h1>
<asp:UpdatePanel runat="server">
 <ContentTemplate>
  <ol><li><ajaxToolKit:AsyncFileUpload runat="server" /></li>
  <li><asp:Button runat="server" Text="After the file is uploaded, click this button" /></li></ol>
 </ContentTemplate>
</asp:UpdatePanel>
</form>
<% if (++Id % 3 != 0)
{ %><iframe src="?id=<%= Id %>" width="90%" name="iframe<%= Id %>" height="400px"
 style="float: right" />
<% } %>
</body></html>
于 2011-09-02T21:29:49.257 に答える