updatePanel下使用uploadFile控件
uploadFile控件和updatePanel不兼容,是微软在官方都承认的事实。现在讨论怎么来避免这个错误,有两种方式可以解决 第一种是: <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<Triggers> <asp:PostBackTrigger ControlID="btnUpload" /> </Triggers> <ContentTemplate> <asp:FileUpload ID="FileUpload1" runat="server" Width="400px" />
<asp:Button ID="btnUpload" runat="server" Text="上传" OnClick="btnUpload_Click" />
</ContentTemplate>
</asp:UpdatePanel> 把提交上传文件的按钮放在<Triggers>标签内,而不放在<ContentTemplate>中,特别注意把UpdateMode设为Conditional。然后在btnUpload_Click方法中执行保存文件和写入数据库的操作。当然这样做,上传文件时就失去了异步交互的效果,但是,在执行其它操作的时候,都还是有Ajax特性的。
第二种是:
使用iframe来嵌入到主页面中,这种方式很好,已经试验通过。
摘自http://www.netfocus.cn/article950.html
1:主页面中使用UpdatePanel,然后UpdatePanel里面放置的不是FileUpload控件,而是一个Iframe <atlas:UpdatePanel ID="up1" Mode="Conditional" runat="server">
<ContentTemplate> <asp:FileUpload ID="FileUpload1" runat="server"/> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click"/> < SPAN>ContentTemplate> < SPAN>atlas:UpdatePanel>
<atlas:UpdatePanel ID="up_attachment" Mode="Conditional" runat="server">
<ContentTemplate> <iframe id="file" name="file" src="attachment.aspx">< SPAN>iframe> < SPAN>ContentTemplate> < SPAN>atlas:UpdatePanel> 2:新建上传文件的页面attachment.aspx,然后放上FileUpload控件 <div>
<asp:FileUpload ID="FileUpload1" runat="server"/> <asp:Button ID="Button1" runat="server" Text="OK" OnClick="Button1_Click"/> < SPAN>div> 3:在attachment.aspx里面,上传文件之后调用主页面的js,报告上传情况。这是函数原型: <script>
window.top.callBack(fileName); < SPAN>script> 4:Default.aspx主页面里面增加这个函数,处理返回值 <script> |
|