2011-06-07 73 views
12

Tengo un control FileUpload dentro de un UpdatePanel. He registrado correctamente el botón de carga con el administrador de scripts para hacer una devolución de datos completa. El único problema que tengo es que FileUpload.HasFile siempre devuelve nulo. Nota: Cuando muevo el control FileUpload fuera del panel de actualización todo funciona. ¿Hay alguna solución o solución para esto?FileUpload.PostedFile siempre nulo dentro de UpdatePanel

Gracias.

+1

posible duplicado de [UpdatePanel con control UploadFile no funciona bien] (http://stackoverflow.com/questions/6225545/updatepanel-with-uploadfile-control-doesnt-work-well) – vcsjones

+0

no realmente ..... – Steven

+0

Utilice [AsyncFileUpload-Control] (http://www.asp.net/ajax/ajaxcontroltoolkit/samples/asyncfileupload/asyncfileupload.aspx). –

Respuesta

12

Puede poner un control FileUpload en un UpdatePanel pero tiene que usar un PostBackTrigger en lugar de un AsyncPostBackTrigger. Recientemente utilicé este enfoque y combiné ambos tipos de disparador.

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

El PostBackTrigger se utilizó para FileUploads mientras que el AsyncPostBackTrigger se utilizó para todos los demás campos de formulario.

+1

Mi botón guarda el nombre de archivo y algunos otros valores en la base de datos. su id es 'btnSave', luego qué ID de control debería estar en PostBackTrigger y qué en AsyncPostBackTrigger. Parece que tu código tiene 2 botones? – SMI

+0

Mi código es para un ejemplo específico de un control FileUpload dentro de un UpdatePanel; esto solo funciona con PostBackTrigger, no con AsyncPostBackTrigger. Tengo 2 botones para otros controles que estaba usando que no eran FileUpload y por lo tanto podría funcionar Asyncrounsly. –

+0

yup, lo tengo, gracias :) – SMI

3

Este es un problema antiguo que se remonta a MSAjax 1.0. El control FileUpload no es compatible con la forma en que funcionan los paneles de actualización y el administrador de scripts. La carga de un archivo modifica la secuencia de datos que causa el ahogador del administrador de scripts. La única forma en que funcionará es tener el Control de carga de archivos fuera del panel de actualización. Si tiene otros controles en la página que dependen del control de carga del archivo, debe configurar el agregar un activador PostBack.

5

FileUpload no funciona dentro de un UpdatePanel. Usted debe usar AsyncFileUpload desde el kit de herramientas de control AJAX de ASPNET.


Cuando se utiliza AsyncFileUpload es necesario configurar los parametros adecuados en forma etiqueta , que se coloca en su página o MasterPage:

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

Si no se establece la derecha y enctype método UploadedComplete nunca disparará, y no podrá obtener FileUpload.FileBytes desde FileUpload.HasFile devuelve verdadero solo durante la ejecución de UploadedComplete.


Además, las versiones anteriores de AsyncFileUpload no funcionaban en Chrome. La versión real (4.1.50731.0) resolvió el problema.

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

tienen el Control de carga de archivos fuera del panel de actualización. Si tiene otros controles en la página que dependen del control de carga del archivo, debe configurar el agregar un activador PostBack.

Cuestiones relacionadas