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