ASP.NET FileUpload en UpdatePanel: todavía no funciona

Intentar utilizar un control FileUpload o AsyncFileUpload en un panel de actualización en una aplicación web NET 4.5 / C #.

Intenté usar el Scriptmanager estándar o el ToolKitScriptManager en mi página maestra.

Mi botón Guardar está configurado como PostBackTrigger (también probó AsyncPostbackTrigger).

No importa qué, mi (Async) FileUpload.HasFile siempre devuelve falso.

Elimine el panel de actualización y ambos controles de carga funcionan bien.

Lo que realmente me sorprende es que tengo esto funcionando en otro proyecto (scriptmanager en la página maestra, Fileupload en el panel de actualización, SaveButton es PostbackTrigger).

¿Hay alguna versión específica de AJAX o .NET que pueda causar problemas?

Esto es extremadamente frustrante

Al agregar el botón a la etiqueta de activación de UpdatePanel, lo puse en funcionamiento:

         

No tuve que hacer nada diferente en el lado del servidor (como la respuesta del usuario5159158).

La carga de archivos no funcionará con una publicación parcial posterior. Requiere solicitud de página completa. Así que agrega la siguiente línea en la carga de tu página.

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

Subir archivo

FileUpload requiere una solicitud de página completa. Esta es una limitación del componente XmlHttpRequest utilizado en todos los marcos AJAX para llamadas asíncronas a la aplicación.

Lo que realmente me sorprende es que tengo esto funcionando en otro proyecto (scriptmanager en la página maestra, Fileupload en el panel de actualización, SaveButton es PostbackTrigger).

Creo que estás utilizando Full PostBack, aunque FileUpload está dentro de ** UpdatePanel .

Por ejemplo,

          

AsyncFileUpload

Si utiliza AsyncFileUpload con UpdatePanel , AsyncFileUpload.HasFile solo debe verificarse dentro de UploadedComplete (no puede verificar dentro del evento Click click) .

La razón es que AsyncFileUpload se carga el archivo a través de Async por sí mismo.

Nota: asegúrese de utilizar ToolkitScriptManager en lugar de 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); } }

otros pensamientos

Personalmente, no me gusta usar AsyncFileUpload dentro de UpdatePanel . En su lugar, prefiero utilizar Full PostBack si necesito subir un archivo.

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