嵌套在UpdatePanel中时FileUpload不起作用? C#

时间:2010-01-21 08:58:57

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

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                        <asp:FileUpload onchange="clickTheButton();" ID="FileUpload1" runat="server" />
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="Button1" />
                </Triggers>
</asp:UpdatePanel>

按钮1在更新面板之外,当用户在上传框中添加文件时运行的javascript是:

function clickTheButton() {
            document.getElementById('<%= Button1.ClientID %>').click();
        }

问题很简单。 FileUpload1.HasFile == false。我不知道为什么会这样,但当我把它放在更新面板中时,它就不再起作用了。

我已经看到了其他一些线索。但他们都没有回答为什么会这样,他们只是指出你可以下载的东西。

编辑:真的,我想要这样做的主要原因是我可以获得一个..上传文件..标签在客户端上传到服务器时弹出,一旦完成,显示它在一个数据主义者。我无法让UpdateProgress工作。

2 个答案:

答案 0 :(得分:15)

基本上你只需要让你的按钮做一个完整的回发来发送文件。还要确保你有this.Form.Enctype =“multipart / form-data”;在您的代码中设置,或者您可以放入该页面。出于安全原因,AsyncPostbacks不能与文件一起使用,没有黑客攻击。 (我从来没有能够让它工作)。

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
      <ContentTemplate>
           <asp:FileUpload onchange="clickTheButton();" ID="FileUpload1" runat="server" />
      </ContentTemplate>
      <Triggers>
         <asp:PostBackTrigger ControlID="Button1" />
      </Triggers>
 </asp:UpdatePanel>

答案 1 :(得分:4)

出于安全考虑,浏览器不允许您通过javascript发布文件。想象一下,如果我可以编写一些javascript来异步提交My Documents文件夹的内容到我的服务器。

因此,发布表单的javascript-ish方法(如UpdatePanel使用的XMLHttpRequest)将无效。

如果你使用的是3.5 SP1,这篇文章描述了一个体面的工作。 http://geekswithblogs.net/ranganh/archive/2009/10/01/fileupload-in-updatepanel-asp.net-like-gmail.aspx

如果你不想使用AjaxControlToolkit,这篇文章描述了一些解决方法。 http://geekswithblogs.net/ranganh/archive/2008/04/01/file-upload-in-updatepanel-asp.net-ajax.aspx