对于在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" />