UpdatePanel中的ASP.NET FileUpload – 仍然无法正常工作

尝试在NET 4.5 / C#Web应用程序的updatepanel中使用FileUpload或AsyncFileUpload控件。

我已尝试在我的母版页中使用标准Scriptmanager或ToolKitScriptManager。

我的保存按钮设置为PostBackTrigger(也尝试过AsyncPostbackTrigger)。

无论如何,我的(异步)FileUpload.HasFile总是返回false。

删除updatepanel,两个uploadcontrols工作正常。

真正让我感到震惊的是我在另一个项目中工作(masterpage中的scriptmanager,updatepanel中的Fileupload,SaveButton是PostbackTrigger)。

是否有某些特定的AJAX版本或.NET版本可能会导致问题?

这非常令人沮丧。

将按钮添加到UpdatePanel的触发器标签,我得到了它的工作:

         

我没有必要做任何不同的服务器端(如user5159158的答案)。

文件上传不适用于部分回发。 它需要完整的页面请求。 因此,在页面加载中添加以下行。

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

上传文件

FileUpload需要完整的页面请求。 这是对所有AJAX框架中使用的XmlHttpRequest组件的限制,用于对应用程序的异步调用。

真正让我感到震惊的是我在另一个项目中工作(masterpage中的scriptmanager,updatepanel中的Fileupload,SaveButton是PostbackTrigger)。

我认为你正在使用Full PostBack,虽然FileUpload位于** UpdatePanel内

例如,

          

AsyncFileUpload

如果将AsyncFileUploadUpdatePanel 一起使用,则AsyncFileUpload.HasFile应仅在UploadedComplete中检查(您无法检查Button click事件内部)

原因是AsyncFileUpload通过Async自身上传文件。

注意:确保使用ToolkitScriptManager而不是ScriptManager

     
private string FileName { get { return (string)(Session["FileName"] ?? ""); } set { Session["FileName"] = value; } } protected void SaveButton_Click(object sender, EventArgs e) { string fileName = FileName; string path = Server.MapPath("~/App_Data/"); var fileInfo = new FileInfo(path + FileName); } protected void AsyncFileUpload1_UploadedComplete(object sender, AsyncFileUploadEventArgs e) { if (AsyncFileUpload1.HasFile) { FileName = AsyncFileUpload1.FileName; string path = Server.MapPath("~/App_Data/"); AsyncFileUpload1.SaveAs(path + AsyncFileUpload1.FileName); } }

其他想法

我个人不喜欢在UpdatePanel中使用AsyncFileUpload 。 相反,如果我需要上传文件,我宁愿使用Full PostBack。

在Page_Load中添加: Page.Form.Attributes.Add("enctype", "multipart/form-data");