C# FileUpload.PostedFile在UpdatePanel内始终为空

C# FileUpload.PostedFile在UpdatePanel内始终为空,c#,asp.net,file-upload,updatepanel,C#,Asp.net,File Upload,Updatepanel,我在UpdatePanel中有一个FileUpload控件。我已成功地向scriptmanager注册了上载按钮,以执行完整的回发。我唯一的问题是FileUpload.HasFile总是返回null。 注意:当我将FileUpload控件移到updatepanel之外时,所有内容都可以工作。是否有解决方案或解决方法 谢谢。这是一个可以追溯到MSAjax 1.0的老问题。FileUpload控件与更新面板的工作方式和脚本管理器不兼容。文件上载修改数据流,导致脚本管理器阻塞。唯一可行的方法是将文件上

我在UpdatePanel中有一个FileUpload控件。我已成功地向scriptmanager注册了上载按钮,以执行完整的回发。我唯一的问题是FileUpload.HasFile总是返回null。 注意:当我将FileUpload控件移到updatepanel之外时,所有内容都可以工作。是否有解决方案或解决方法


谢谢。

这是一个可以追溯到MSAjax 1.0的老问题。FileUpload控件与更新面板的工作方式和脚本管理器不兼容。文件上载修改数据流,导致脚本管理器阻塞。唯一可行的方法是将文件上载控件置于更新面板之外。如果页面上有其他依赖于文件上载控件的控件,则需要设置“添加回发”触发器

文件上载在UpdatePanel中不起作用。您必须使用ASPNET AJAX控件工具包中的


使用AsyncFileUpload时,必须在页面或母版页中的表单标记中设置正确的参数:

<form id="form1" runat="server" enctype="multipart/form-data" method="post">

如果未设置正确的加密类型和方法,则UploadedComplete将永远不会启动,并且您将无法获取FileUpload.FileBytes,因为FileUpload.HasFile仅在UploadedComplete执行期间返回true



此外,AsyncFileUpload的早期版本在Chrome上不起作用。实际版本(4.1.50731.0)解决了这个问题。

您可以在UpdatePanel中放置FileUpload控件,但必须使用PostBackTrigger,而不是AsyncPostBackTrigger。我最近使用了这种方法,并结合了这两种类型的触发器

    <Triggers>
        <asp:PostBackTrigger ControlID="btnSave" />
        <asp:AsyncPostBackTrigger ControlID="btnAsyncSave"/>
    </Triggers>

PostBackTrigger用于文件上载,而AsyncPostBackTrigger用于所有其他表单字段。


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

将文件上载控件置于更新面板之外。如果页面上有其他依赖于文件上载控件的控件,则需要设置“添加回发”触发器

我遇到的问题是,触发发回帖子的按钮位于UpdatePanel中(不知道为什么)。将它们移到UpdatePanel之外解决了这个问题。

可能重复使用.AsyncFileUpload控件对我来说并不完美。最糟糕的是,如果我使用普通HTML文件输入控件并发回,Request.Files.Count返回0(如果在UpdatePanel内)。太奇怪了。好吧,以防有人穿上这双鞋。我终于找到了我的bug源。我的fileupload控件被放置在一个面板中,该面板在启动时具有Visible=“False”,当用户单击按钮时显示(该按钮未注册为完整回发控件。我认为这就是问题所在)。因此,我也向scriptmanager注册了显示上载面板的按钮。现在一切都很好!!!我的按钮正在将文件名和其他一些值保存到数据库中。它的id是“btnSave”,那么PostBackTrigger中应该有什么ControlID,AsyncPostBackTrigger中应该有什么。您的代码似乎有两个按钮?我的代码是针对UpdatePanel内的FileUpload控件的特定示例的-这仅适用于PostBackTrigger,而不适用于AsyncPostBackTrigger。我使用的其他控件有两个按钮,它们不是文件上传,因此可以异步工作。对于刚刚出现的控件,技术上不需要
AsyncPostBackTrigger
,除非您的控件要求UpdatePanel识别它们。我发现Async遇到了很多麻烦。