无法使用UpdatePanel与FileUpload控件异步上载照片

时间:2014-10-10 16:51:58

标签: c# asp.net .net file-upload asp.net-ajax

在我的ASP.NET Web窗体应用程序中,我添加了一个上传文件的功能,但我不想做完整的回发。所以为了使它异步我想到了使用UpdatePanel。 此UpdatePanel包含FileUpload控件和用于上载所选照片的​​按钮。当我调试我的代码以检测文件是否实际被选中时,我发现FileUpload的HasFile属性为false。

当我删除UpdatePanel时它会起作用,但我不明白为什么。

为了帮助您理解,以下是代码:

ASPX加价:

<asp:UpdatePanel ID="UPProf" runat="server">
<ContentTemplate>
<asp:FileUpload ID="FUDP" runat="server" />
<asp:Button ID="BUDP" runat="server" OnClick="BUDP_Click" Text="Upload your photo" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="BUDP" EventName="Click" />
</Triggers>
</asp:UpdatePanel>

这是CS代码:

protected void BUDP_Click(object sender, EventArgs e)
{
    try
    {
        if (FUDP.HasFile)  //  code doesn't pass this if condition
        {
            FUDP.SaveAs("D:/Pictures/" + count + ".jpeg");  //it doesn't work since there is no file here
        }
        else
        {
           //Set some message for user
        }
    }
    catch (Exception ex)
    {
        //log the error
    }
}

1 个答案:

答案 0 :(得分:1)

上传需要完整的网页请求。这是对所有AJAX框架中使用的XmlHttpRequest组件的限制,用于对应用程序的异步调用。

删除UpdatePanel或制作BUDP按钮以执行回发。

<asp:UpdatePanel ID="UPProf" runat="server">
   <ContentTemplate>
      <asp:FileUpload ID="FUDP" runat="server" />
      <asp:Button ID="BUDP" runat="server" OnClick="BUDP_Click" 
          Text="Upload your photo" />
   </ContentTemplate>
   <Triggers>
      <asp:PostBackTrigger ControlID="BUDP" />
   </Triggers>
</asp:UpdatePanel>