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

Posted

技术标签:

【中文标题】FileUpload 嵌套在 UpdatePanel 中时不起作用? C#【英文标题】:FileUpload Doesn't Work When Nested In UpdatePanel? C# 【发布时间】:2011-01-07 15:42:43 【问题描述】:
 <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 == 假。我不知道为什么会这样,但是当我把它放到更新面板时它就停止工作了。

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

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

【问题讨论】:

这对我有帮助,给出了清晰的解释c-sharpcorner.com/uploadfile/prathore/… 【参考方案1】:

基本上你只需要让你的按钮做一个完整的回发来发送文件。还要确保你有 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>

【讨论】:

更新进度不适用于完整的回发,对吧? 正确,您无法监控进度,除非您的浏览器在回发期间显示加载栏,这似乎不是所有浏览器上的可靠方式。 这个很老了,现在可以通过js回传了,但是怎么做呢?【参考方案2】:

出于安全考虑,浏览器不允许您通过 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

【讨论】:

请注意,这个答案已经过时了,因为它早于 html5 文件上传(以及更新的文件系统访问 API)的存在。【参考方案3】:

文件上传不适用于部分回发。 所以只需在页面加载时添加这一行

ScriptManager.GetCurrent(this).RegisterPostBackControl(this.YourControlID);

或使用PostBackTrigger

<Triggers>
            <asp:PostBackTrigger ControlID="YourControlID" />
</Triggers>

或者您需要 AjaxControl Toolkit 中定义的特殊 AsyncFileUpload 控件。

<ajaxToolkit:AsyncFileUpload OnClientUploadError="uploadError"
     OnClientUploadComplete="uploadComplete" runat="server"
     ID="AsyncFileUpload1" Width="400px" UploaderStyle="Modern"
     UploadingBackColor="#CCFFFF" ThrobberID="myThrobber" />

您可以查看here。

【讨论】:

以上是关于FileUpload 嵌套在 UpdatePanel 中时不起作用? C#的主要内容,如果未能解决你的问题,请参考以下文章

用fileupload控件上传文件怎样使上传的文件显示在指定的位置

使用apache的fileupload组件上传文件怎么解决编码问题?

fileupload组件的有关问题

用fileupload上传图片,怎么获取上传后图片的相对路径

如何在 jupyter 实验室中使用 FileUpload 小部件?

asp:FileUpload 控件在使用假输入时未获取文件值