Como sabemos que el FileUpload y el ImageButton no son compatibles con el UpdatePanel, una solución
que encontré para el primero se los dejo como ejemplo:
<asp:UpdatePanel ID="upCargarArchivos" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
<ContentTemplate>
<asp:Panel ID="pHeader" runat="server" CssClass="cpHeader">
<asp:Label ID="lblText" runat="server" />
</asp:Panel>
<asp:Panel ID="pBody" runat="server" CssClass="cpBody">
<table style="margin: auto">
<tr>
<td align="left">
<asp:FileUpload ID="fu" runat="server" Width="70%" EnableViewState="true" />
</td>
<td>
<asp:Button ID="btnRegistrarDocumento" runat="server" Text="Subir" OnClick="btnRegistrarDocumento_Click" />
</td>
</tr>
<tr>
<td colspan="2">
<asp:GridView ID="gvArchivoIncidencia" runat="server" AutoGenerateColumns="False"
CellPadding="2" Font-Size="11px" Font-Names="Arial" Width="400px" EmptyDataText="No existen documentos asociados."
EnableTheming="True" ShowHeaderWhenEmpty="True" BackColor="White" BorderColor="#CCCCCC"
DataKeyNames="IdArchivoIncidencia" BorderStyle="None" BorderWidth="1px">
<Columns>
<asp:TemplateField HeaderText="Elim." ItemStyle-Width="40px" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:ImageButton ID="ibtnEliminar" runat="server" OnClick="ibtnEliminar_Click" CommandArgument='<%# Eval("IdArchivoIncidencia") %>'
ImageUrl="~/img/delete.png" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Descar." ItemStyle-Width="40px" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:ImageButton ID="ibtnDescargar" runat="server" OnClick="ibtnDescargar_Click"
CommandArgument='<%# Eval("IdArchivoIncidencia") %>' ImageUrl="~/img/down.png"
Height="18px" Width="18px" ImageAlign="AbsMiddle" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Archivo">
<ItemTemplate>
<asp:Label Font-Size="11px" Font-Names="Arial" CssClass="style4" ID="lblNombreArchivo"
runat="server" Text='<%# Bind("NombreArchivo") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="White" ForeColor="#000066" />
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" Height="30px" />
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
<RowStyle ForeColor="#000066" />
<SelectedRowStyle BackColor="#9dd9f5" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#007DBB" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#00547E" />
</asp:GridView>
</td>
</tr>
</table>
</asp:Panel>
<asp:CollapsiblePanelExtender ID="CollapsiblePanelExtender1" runat="server" TargetControlID="pBody"
CollapseControlID="pHeader" ExpandControlID="pHeader" Collapsed="true" TextLabelID="lblText"
CollapsedText="SUBIR SUSTENTO" ExpandedText="SUBIR SUSTENTO"
CollapsedSize="0">
</asp:CollapsiblePanelExtender>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="btnRegistrarDocumento" />
</Triggers>
</asp:UpdatePanel>
Podemos observar en la parte de <Triggers> se agrega el elemento del botón Registrar Documento que interactua directamente con el fileupload con esto solucionamos la compatibilidad entre el fileupload y el update panel.
protected void
btnRegistrarDocumento_Click(object sender, EventArgs e)
{
string
str_mensaje, str_extension, str_nombre_archivo;
if
(fu.HasFile)
{
str_extension = System.IO.Path.GetExtension(fu.FileName);
str_nombre_archivo = System.IO.Path.GetFileName(fu.FileName);
string ruta =
System.AppDomain.CurrentDomain.BaseDirectory
+ "RepositorioIncidencias\\" +
ftxtoctp.Text.Trim() + str_nombre_archivo;
if
(File.Exists(ruta))
{
File.Delete(ruta);
}
fu.PostedFile.SaveAs(ruta);
objBSArchivoIncidencia.bcIngresarArchivoIncidencia(oENArchivoIncidencia);
}
else
{
str_mensaje = "Indique un archivo";
string script = "<script language=Javascript>";
script += "alert('" + str_mensaje + "');";
script += "</script>";
Page.ClientScript.RegisterStartupScript(GetType(), "script", script);
}
}
Ahora lo siguiente dentro de la grilla agregé dos ImageButton uno que elimina los registros y otra que descarga los documentos cargados, ocurre el mismo problema no descarga los elementos para solucionar esto debemos agregar la siguiente línea d ecódigo:
ScriptManager.GetCurrent(this.Page).RegisterPostBackControl(gvArchivoIncidencia);
Ahora si podremos llamar y descargar los documentos:
protected void
ibtnDescargar_Click(object sender, ImageClickEventArgs ex)
{
ImageButton
ibtn = (ImageButton)sender;
int
IdArchivoIncidencia = int.Parse(ibtn.CommandArgument);
string
rutaArchivo = "";
rutaArchivo =
dt2.Rows[0][1].ToString();
string
nombreArchivo = "";
nombreArchivo =
dt2.Rows[0][2].ToString();
string
archivo = rutaArchivo;
Response.AddHeader("Content-Disposition", "attachment; filename= " +
nombreArchivo);
Response.Flush();
Response.Clear();
Response.WriteFile(archivo);
Response.End();
}