AJAX.UpdatePanel 會讓 FileUpload元件上船失效,該如何解決?
這個問題是微軟的UpdatePanel引起的,網上目前一般有2種針對性的解決方案。
最簡單的方法是將上傳的按鈕放在UpdatePanel之外,如果必須在UpdatePanel裏面的話,那麼請將UpdatePanel增加一個PostBackTrigger,這可以在Trigger屬性中設置,將這個PostBackTrigger的ControlID設置到上傳按鈕。
另外一個解決方案比較複雜方法如下:
1:新建主頁面Default.aspx
在適當的位置,放置一個上傳附件的UpdatePanel區域








2:新建上傳檔的頁面attachment.aspx,然後放上FileUpload控制項




3:在attachment.aspx裏面,上傳檔之後調用主頁面的js:
protected void Button1_Click(object sender, EventArgs e)
{
string fileFullPath = fu_photo.PostedFile.FileName;
string fileName = fileFullPath.Substring(fileFullPath.LastIndexOf('\\') + 1);
string fileSavePath = "../Photos/" + fileName;
fu_photo.PostedFile.SaveAs(Server.MapPath(fileSavePath));
Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "photoscript", "window.top.callBack('" + fileSavePath + "');", true);
4:Default.aspx主頁面裏面增加這個函數,處理返回值
用js改變圖片路徑為新上傳的路徑,然後伺服器端獲的隱藏欄位的值,即為新上傳圖片路徑
上傳頁面時不能獲得js更改後的image控制項的屬性值,所以添加一個隱藏欄位: