ASP.NET Ajax中的UpdatePanel和asp.net中FileUpload控件是不兼容的,但是采用下面的方法,可以在ASP.NET+Ajax下實現文件上傳
<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>
</asp:UpdatePanel>
把提交上傳文件的按鈕放在<Triggers>標簽內,而不放在<ContentTemplate>中,特別注意把UpdateMode設為Conditional。然后在btnUpload_Click方法中執行保存文件和寫入數據庫的操作。當然這樣做,上傳文件時就失去了異步交互的效果,但是,在執行其它操作的時候,都還是有Ajax特性的。另外,如果您的這個上傳文件的頁面使用了一個母版頁,并且在母版頁中有一個UpdatePanel,在母版頁中對子頁的控件加上<Triggers>是不行的,還好,UpdatePanel是可以嵌套的。
方案一、如果將scriptmanager的enablepartialrending設為false則可以正確上傳,這個方法最簡單,但是會有缺陷,就是在同一個頁面上的多個UpdatePanel不可以獨自刷新了。另外,當你的UpdatePanel中存在Validator的話,會造成整個頁面postback,這個問題似乎是Altas的一個bug.
方案二、摘自http://www.netfocus.cn/article950.html
1:主頁面中使用UpdatePanel,然后UpdatePanel里面放置的不是FileUpload控件,而是一個Iframe
2:這個iframe在鏈接一個新的頁面,那個頁面里面有FileUpload控件。
3:上傳完畢后,告訴主頁面上傳得結果
先看一個直接使用FileUpload的例子:這個例子里面,服務端是無法找到上傳文件的。






看看,我們該如何實現
1:新建主頁面Default.aspx
在適當的位置,放置一個上傳附件的UpdatePanel區域





2:新建上傳文件的頁面attachment.aspx,然后放上FileUpload控件




3:在attachment.aspx里面,上傳文件之后調用主頁面的js,報告上傳情況。這是函數原型:



4:Default.aspx主頁面里面增加這個函數,處理返回值





