c# - ruta - fileupload updatepanel
FileUpload no funciona cuando está anidado en UpdatePanel? DO# (3)
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:FileUpload onchange="clickTheButton();" ID="FileUpload1" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" />
</Triggers>
</asp:UpdatePanel>
El botón 1 está fuera del panel de actualización y el javascript que se ejecuta cuando un usuario agrega un archivo en el cuadro de carga es este:
function clickTheButton() {
document.getElementById(''<%= Button1.ClientID %>'').click();
}
El problema es simple. FileUpload1.HasFile == false. No sé por qué esto es así, pero cuando lo coloco en el panel de actualización deja de funcionar.
He visto algunos otros hilos en esto. Pero ninguno de ellos responde por qué sucede esto, solo apuntan a cosas que puedes descargar.
EDITAR: Realmente, mi principal razón para querer hacer esto es para poder obtener una etiqueta de ... Cargando el archivo ... mientras el cliente está cargando en el servidor y una vez que se ha completado, lo muestra en una lista de datos. Simplemente no puedo hacer que el UpdateProgress funcione.
Básicamente, solo necesita hacer que su botón realice una devolución de datos completa para enviar el archivo. También asegúrate de que tienes este.Form.Enctype = "multipart / form-data"; Establecer en su código, o puede poner en esa página. AsyncPostbacks no funciona con archivos por razones de seguridad como se mencionó, sin hacks. (Nunca he podido hacerlo funcionar).
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:FileUpload onchange="clickTheButton();" ID="FileUpload1" runat="server" />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
</asp:UpdatePanel>
La carga de archivos no funcionará con una devolución parcial. Tan solo agrega esta linea a tu carga de pagina
ScriptManager.GetCurrent(this).RegisterPostBackControl(this.YourControlID);
O utilice PostBackTrigger
.
<Triggers>
<asp:PostBackTrigger ControlID="YourControlID" />
</Triggers>
O necesita un control especial AsyncFileUpload como se define en el kit de herramientas AjaxControl.
<ajaxToolkit:AsyncFileUpload OnClientUploadError="uploadError"
OnClientUploadComplete="uploadComplete" runat="server"
ID="AsyncFileUpload1" Width="400px" UploaderStyle="Modern"
UploadingBackColor="#CCFFFF" ThrobberID="myThrobber" />
Puedes consultar here .
Por razones de seguridad, los navegadores no te permiten publicar archivos a través de javascript. Imagínese si pudiera escribir un poco un javascript para enviar de forma asincrónica el contenido de su carpeta Mis documentos a mi servidor.
Por lo tanto, los métodos de javascript-ish para publicar el formulario, como el XMLHttpRequest utilizado por el Panel de Actualización, no funcionarán.
Esta publicación describe un trabajo decente si estás en 3.5 SP1. http://geekswithblogs.net/ranganh/archive/2009/10/01/fileupload-in-updatepanel-asp.net-like-gmail.aspx
Y esta publicación describe un par de alternativas de trabajo si prefiere no utilizar el kit de herramientas AjaxControl. http://geekswithblogs.net/ranganh/archive/2008/04/01/file-upload-in-updatepanel-asp.net-ajax.aspx