對於在UpdatePanel中使用FileUpload來上傳文件,網上有很多說是在Triggers來解決
<Triggers>
<span style="white-space:pre"> </span><asp:PostBackTrigger ControlID ="btnAddProduct" /> <!-- btnAddProduct爲提交按鈕 -->
</Triggers>
但是,這種方法也就失去了使用UpdatePanel的意義,會刷新頁面,所以使用iframe纔是真正的解決方法。
在適當的位置,放置一個上傳附件的UpdatePanel區域並加iframe用於放置FileUpload控件
實現過程:
1、新建主頁面Default.aspx
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<span style="white-space:pre"> </span><ContentTemplate>
<iframe id="file" name="file" src="attachment.aspx" scrolling="no" style="width: 300px; height: 35px;border :0px;"></iframe>
<span style="white-space:pre"> </span></ContentTemplate>
</asp:UpdatePanel>
2:新建上傳文件的頁面attachment.aspx,然後放上FileUpload控件
<div>
<asp:FileUpload ID="FileUpload1" runat="server" Width="180px"
Height="25px" />
<asp:Button ID="Button1" runat="server" οnclick="Button1_Click" Text="讀取文件"
Width="80px" Height="25px" />
</div>
3:在attachment.aspx的cs文件通過Button1的Click事件上傳文件裏面,上傳文件之後調用主頁面的js: protected void Button1_Click(object sender, EventArgs e)
{
string filename = FileUpload1.FileName;
string path = Server.MapPath("TextData/");
FileUpload1.PostedFile.SaveAs(path+ FileUpload1.FileName);
Response.Write("<script> window.top.callBack('" + path + FileUpload1.FileName + "');</script>");//調用主頁面的js,返回
}
4:Default.aspx主頁面裏面callBack函數,並添加一個隱藏控件,處理返回值。將返回值及圖片新上傳的路徑複製給隱藏控件,然後服務器端獲的隱藏字段的值,即爲新上傳圖片路徑
function callBack(qfile) {
<span style="white-space:pre"> </span>document.getElementById('<% =ReturnValue.ClientID %>').value = qfile;
}
<input id="ReturnValue" type="hidden" runat="server" />