AsyncFileUplaod失去目标框架

时间:2011-08-30 07:54:49

标签: asp.net iframe asyncfileupload

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

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

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

我在网上搜索了一个解决方案,发现AFU更改了document.forms [0] .target所以在我的uploadComplete事件中我尝试将document.forms [0] .target恢复到正确的目标( IFRAME id)但它仍然在新的浏览器窗口中打开,iframed文档作为主文档。

任何人都可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

ASP.NET AJAX AsyncFileUpload控件的设计存在一个已知问题:AsyncFileUpload changes browser location when used in IFRAME page。但是,我无法使用工具包的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>