C# FileUpload.PostedFile始终为空,除非页面至少回发一次?

C# FileUpload.PostedFile始终为空,除非页面至少回发一次?,c#,asp.net,asynchronous,C#,Asp.net,Asynchronous,这似乎是个显而易见的问题,但我还是很困惑。我在页面上有一个asp FileUpload控件,它恰好位于UpdatePanel中。我已将UpdatePanel设置为UpdateMode=“Conditional”。我还在触发器部分设置了一个回发触发器(不是异步回发触发器)。点击按钮,它应该将文件上传到数据库,在我的数据层中处理。在第一次尝试时,它将失败,因为PostedFile为null,但您会看到页面执行回发(这会清除/重置下载控件)。当我再次尝试上传文件时,一切正常。我的第一个想法是因为它需要

这似乎是个显而易见的问题,但我还是很困惑。我在页面上有一个asp FileUpload控件,它恰好位于UpdatePanel中。我已将UpdatePanel设置为UpdateMode=“Conditional”。我还在触发器部分设置了一个回发触发器(不是异步回发触发器)。点击按钮,它应该将文件上传到数据库,在我的数据层中处理。在第一次尝试时,它将失败,因为PostedFile为null,但您会看到页面执行回发(这会清除/重置下载控件)。当我再次尝试上传文件时,一切正常。我的第一个想法是因为它需要回发才能真正获取字节,对吗?好吧,根据这个逻辑,我想如果我试图上传一个不同的文件,那么它实际上会上传上一个文件。它没有;它上传了新文件。这就是我困惑的地方

以下是上传方法:

protected void ReplaceDoc()
{
    var data = ulReplaceDoc.FileBytes;
    var fileName = ulReplaceDoc.PostedFile.FileName;
    if (MocApi.ReplaceWorkingDocument(_request.MocRequestID, _currentUser, fileName, data))
    {
        //refresh files
        ShowFiles();
    }
}
非常直截了当。它应该抓取文件,上传它(在数据库上运行更新查询以更改文件),然后刷新数据源以显示新文件


所以我的问题是:为什么它只在第一次尝试时失败?另外,有什么更好的方法可以达到这种效果?

在页面加载事件中,添加以下代码

Page.Form.Attributes.Add("enctype", "multipart/form-data");

它会起作用的。第一次回发时enctype属性丢失。

很好。。。检查了很多,但最合适的是这个。有人能解释一下这个属性吗?