FileUpload.PostedFile在UpdatePanel中始终为null

本文关键字:null PostedFile UpdatePanel FileUpload | 更新日期: 2023-09-27 17:58:30

我在UpdatePanel中有一个FileUpload控件。我已经成功地向脚本管理器注册了上传按钮以进行完整的回发。我唯一的问题是FileUpload.HasFile总是返回null。注意:当我把FileUpload控件移到updatepanel之外时,所有的东西都可以工作。对此有解决方案或变通方法吗。

谢谢。

FileUpload.PostedFile在UpdatePanel中始终为null

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

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

PostBackTrigger用于FileUploads,而AsyncPostBackTriger用于所有其他表单字段。

FileUpload在UpdatePanel中不起作用。必须使用ASPNET AJAX控制工具包中的AsyncFileUpload


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

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

如果您没有设置正确的enctype和方法,则UploadedComplete将永远不会触发,并且您将无法获得FileUpload.FileBytes因为FileUpload.HasFile仅在UploadedComplete执行期间返回true。


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

这是一个可以追溯到MSAjax 1.0的老问题。FileUpload控件与Update Panels和Script Manager的工作方式不兼容。文件上传会修改数据流,导致脚本管理器阻塞。它的唯一工作方式是在更新面板之外设置文件上传控件。如果页面上有其他依赖于文件上传控件的控件,则需要设置add a PostBack触发器。

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

将文件上载控件置于更新面板之外。如果页面上有其他依赖于文件上传控件的控件,则需要设置add a PostBack触发器。

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