Usando FileUpload con UpdatePanel


Dicen que más vale tarde que nunca. Hoy me he encontrado con un problema que, al parecer, es bastante conocido, pero con el que hasta ahora no me había topado. Se conoce que hay una serie de controles que no funcionan correctamente con los UpdatePanel. Uno de ellos es el control FileUpload. Os pongo el código para que veáis el problema y os cuento como tras un rato de búsqueda lo he solucionado

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
       <asp:FileUpload ID="fileUploadImage" runat="server"></asp:FileUpload>
    </ContentTemplate>
    <Triggers>
       <asp:AsyncPostBackTrigger ControlID="btnUpload"  />
   </Triggers>
</asp:UpdatePanel>

<asp:Button ID="btnUpload" runat="server" Text="Upload Image" OnClick="btnUpload_Click" />

A priori podría parecer que si en el codebehind del evento intentamos acceder al archivo subido no debería haber ningún problema. Pero nada más lejos de la realidad. Probando este código empecé a darme cuenta de que los ficheros no se subían y empecé a ver que el problema venía porque la variable fileUploadImage.HasFile del control siempre devolvía False.

Buscando e investigando un poco por internet pude comprobar que venía por el hecho de usar AsyncPostBackTrigger para el evento con el control FileUpload. Esto no funciona correctamente, y para solucionarlo, en lugar de AsyncPostBackTrigger hay que usar PostBackTrigger. El motivo de este problema es porque la manipulación de ficheros esta restringida en el lado del cliente por motivo de seguridad. El código correcto es el que os muestro a continuación:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
       <asp:FileUpload ID="fileUploadImage" runat="server"></asp:FileUpload>
    </ContentTemplate>
    <Triggers>
       <asp:PostBackTrigger ControlID="btnUpload"  />
   </Triggers>
</asp:UpdatePanel>

<asp:Button ID="btnUpload" runat="server" Text="Upload Image" OnClick="btnUpload_Click" />

Pues nada, con esto ya empezó a funcionar correctamente. A mi me supuso unos cuantos minutos de buscar y buscar para encontrar el motivo que provocaba el error y solucionarlo.

Os paso algunos enlaces que he utilizado para resolver este pequeño pero engorroso problema:

http://www.c-sharpcorner.com/uploadfile/prathore/fileupload-control-in-update-panel-using-Asp-Net-ajax/

http://stackoverflow.com/questions/2107952/fileupload-doesnt-work-when-nested-in-updatepanel-c-sharp

http://www.codeproject.com/Articles/482800/FileplusUploadplusinplusUpdateplusPanel

Anuncios

2 comentarios en “Usando FileUpload con UpdatePanel

  1. Amigo de ante mano quiero agradecer todos los aportes han sido muy útiles.
    La duda es la siguiente:
    estoy realizando una serie de formularios como wsp, estos formularios deben realizar ciertas funciones tales como guardar información, mostrar un encabezado con información anteriormente almacenada, etc. El caso es que una de sus funcionalidades es subir imágenes y obviamente que estén reverenciadas a la información almacenada en el formulario, pero no he podido lograr esto trato de usar fileupload pero no logro almacenarla en una biblioteca de documentos del sitio, el error “El método SaveAs está configurado para que requiera una ruta de acceso raíz y la ruta de acceso … no es de raíz. “, he buscado información y dice que debe ser una dirección física.
    te pido por favor puedas ayudarme por que soy nuevo en esto de sharepoint y no he podido solucionarlo .

    Gracias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s