2011-07-12 13 views
5

Estoy usando un control AsyncFileUpload en mi página aspx.net. Este control se ejecuta dentro de un panel de actualización.Borrar AjaxToolkit AsyncFileUpload control

Puedo cargar archivos al servidor de manera asincrónica.

Mi problema es que no puedo actualizar toda la página después de cargar cada archivo, así que necesito descubrir cómo borrar el último archivo cargado, de modo que cuando el usuario selecciona un nuevo archivo para cargar, el antiguo el archivo no aparece en el control y el control no conserva su última carga en ViewState.

He intentado con esto http://www.aspsnippets.com/Articles/Clear-contents-of-AsyncFileUpload-Control-after-upload-and-page-revisit.aspx pero solo borra el html, cuando hago la devolución de datos asincrónica del servidor, el control AsyncFileUpload todavía tiene el último archivo cargado.

¿Hay alguna manera de hacer la limpieza en el servidor? Quizás algo relacionado con ver el estado?

Cualquier ayuda sería apreciada, gracias.

Respuesta

5

En el lado del cliente puede usar el evento OnClientUploadComplete para borrar la última entrada del archivo cargado. Una vez que se completa la carga del archivo y cuando se produce la devolución, el AsyncFileUpload1.HasFile devolverá false.

En aspx página:

<asp:AsyncFileUpload ID="AsyncFileUpload1" OnClientUploadComplete="success" OnUploadedComplete="AsyncFileUpload1_UploadedComplete" runat="server" /> 

y dentro de las etiquetas de JavaScript:

function success() {   
    var fu = document.getElementById("AsyncFileUpload1"); 
    document.getElementById("AsyncFileUpload1").innerHTML = fu.innerHTML; 
} 
+0

Gracias Waqas! Esto me ayudó hoy :-) –

+1

'éxito de la función (remitente, args) {$ (sender._element) .find ('input'). Val (''); } ' –

0

compensación del lado del servidor que funcionó para mí:

protected void FileUploadComplete(object sender, EventArgs e) 
{ 
    string filename = System.IO.Path.GetFileName(AsyncFileUpload1.FileName); 
    AsyncFileUpload1.PostedFile.SaveAs(Server.MapPath("Uploads/") + filename); 

    ClearContents(sender as Control); 
} 

private void ClearContents(Control control) 
{ 
    for (var i = 0; i < Session.Keys.Count; i++) 
    { 
     if (Session.Keys[i].Contains(control.ClientID)) 
     { 
     Session.Remove(Session.Keys[i]); 
     break; 
     } 
    } 
} 

referencia: eslabón de la cuestión Fer. http://www.aspsnippets.com/Articles/Clear-contents-of-AsyncFileUpload-Control-after-upload-and-page-revisit.aspx

2

Esto funcionó para mí:

function ClearFile() { 
    $('input[type="file"]').each(function() { 
     $("#" + this.id).replaceWith($("#" + this.id).clone(true)); 
    }); 

    //For other browsers 
    $('input[type="file"]').each(function() { $("#" + this.id).val(""); }); 
} 
0
<asp:AsyncFileUpload ID="AsyncFileUpload1" OnClientUploadComplete="success" OnUploadedComplete="AsyncFileUpload1_UploadedComplete" runat="server" /> 

y

function success(sender, args) { $(sender._element).find('input').val(''); } 

que se trabaja perfectl en todos los navegadores modernos, gracias a "Scotty.NET"