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
如果将AsyncFileUpload与UpdatePanel 一起使用,则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");