2

我的页面有一个IFRAME标记,其 src 指向另一个页面,该页面有 4 个 ImageButtons 和一个 ModalPopupExtender,它打开一个包含 AsyncFileUpload (AFU) 的 DIV,用于加载图片。

每当用户单击 ImageButton 时,ModalPopupExtender 使用 AFU 控件打开 DIV,用户选择图片,然后 Imagebutton 获取所选图像的 ImageURL。

我第一次选择要上传的图像时一切正常,图像被保存,ImageButton 获得正确的 ImageURL,控制返回到调用页面(带有 IFRAME 标签的页面)。用户第二次单击 ImageButton 打开 ModalPopupExtender 以选择和上传图片时,页面会打开一个新的浏览器窗口,其中 iframed 文档作为主文档...

我在网上搜索了一个解决方案,发现 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 回答