2008-08-30 27 views
17

Según Microsoft el control FileUpload no es compatible con un AJAX UpdatePanel.FileUpload control dentro de un UpdatePanel sin actualizar toda la página?

Soy consciente de que un PostBackTrigger puede ser añadido al botón de envío del formulario como el siguiente:

<Triggers> 
    <asp:PostBackTrigger ControlID="Button1" /> 
</Triggers> 

El problema es que esto obliga a la forma de realizar un post-vuelta completa, que anula el conjunto punto de usar el UpdatePanel en primer lugar. ¿Hay alguna solución a este problema que no cause que la página completa se actualice?

Respuesta

8

Conozco un componente de terceros que puede hacer eso. Se llama "swfupload" y es de uso libre y de código abierto, y usa javascript y flash para hacer la magia.

aquí es una lista de las características que ofrecen: (de su sitio)

  • cargar varios archivos a la vez ctrl/shift-selección en el diálogo
  • devoluciones de llamada de JavaScript en todos los eventos
  • Obtener información de archivo antes de subida comienza
  • elementos de estilo de carga con XHTML y CSS
  • Mostrar información de WHI los archivos le se están cargando usando HTML
  • No es necesario recargar la página
  • Funciona en todas las plataformas/navegadores que tienen compatibilidad con Flash.
  • degrada con gracia a la forma normal de subida HTML si Flash o JavaScript es disponible tamaño del archivo
  • de control antes de que comience carga
  • Sólo mostrar tipos de archivos seleccionados en el diálogo
  • archivos de cola, quitar/añadir archivos antes de iniciar la carga

También tienen un demo area donde puedes jugar con su control. De esta forma, puede asegurarse de que sea exactamente lo que quiere.

Lo usamos en uno de nuestros proyectos y nunca nos ha fallado, así que creo que es una apuesta segura.

Ah, y aquí es la página de descarga: http://code.google.com/p/swfupload/

3

No se puede cargar el archivo (s) a través de AJAX solamente mediante la recarga de un documento completo HTML. Usted debe usar iframe s si prefiere HTML puro (esto es más común, por ejemplo, usado por WordPress) o algo así como swfupload sugerido por Sven.

1

Encontré esto el otro día cuando me encontré con el mismo problema: http://vinayakshrestha.wordpress.com/2007/03/13/uploading-files-using-aspnet-ajax-extensions/.

Para mi implementación, puse el iframe en una ventana emergente modal y agregué un botón con style = "display: none" para manejar el cierre de la ventana emergente. En la función javascript que observa el cambio en el iframe, agregué document.getElementById ("<% = btnCloseUpload.ClientID%>"). Clic(); para el botón oculto.

3

Agregue esto a su control de botón:

OnClientClick="javascript:document.forms[0].encoding = 'multipart/form-data';" 

-o-

hacer que su etiqueta de página de formulario como:

<form id="form1" runat="server" enctype="multipart/form-data"> 
+3

Intenté esto - mi control FileUpload todavía devuelve False para la propiedad .HasFile. –

1

Prueba la AsyncFileUpload AJAX. Funciona bien si se usa en la materia para la que está destinado (el evento UploadedComplete).

http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx

+0

No sé si es un caso específico mío o no, pero esto también me devuelve falso para .HasFile cuando está dentro de un panel de actualización. Mi solución es utilizar una etiqueta de desencadenadores para excluirla como la pregunta principal, pero aún así utilizar un control AsyncFileUpload (que probablemente elimine la naturaleza asincrónica). Esto es con un sitio web mojoPortal. – TamusJRoyce

-1

El botón que está desencadenando el evento de carga tiene que tener UseSubmitBehavior propiedad establecida en falso:

clsUploadButton.UseSubmitBehavior = False; 
Cuestiones relacionadas