2011-03-24 14 views
5

Tengo un control de usuario con un panel de actualización, un gestor de scripts y un control asyncfileupload.No se puede hacer que AsyncFileUpload funcione en el panel de actualización

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> 
<asp:ScriptManager ID="ScriptManager2" runat="server" ></asp:ScriptManager> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <cc1:AsyncFileUpload ID="AsyncFileUpload2" runat="server" /> 
     <asp:LinkButton id="lbSubmitOrder" runat="server" title="Submit Order Request" class="btn_blue_dynamic_med"/> 
    </ContentTemplate>  
</asp:UpdatePanel> 

En mi código detrás:

Dim path As String = Server.MapPath("~/temp/test.tmp") 

AsyncFileUpload2.SaveAs(path) 

En mis AsyncFileUpload2 objeto el nombre del archivo no es nada. Parece que no puedo obtener una referencia al archivo que se supone debe ser cargado.

-Nate

ACTUALIZACIÓN
He añadido

Private Sub AsyncFileUpload1_UploadedComplete(ByVal sender As Object, ByVal e As AjaxControlToolkit.AsyncFileUploadEventArgs) Handles AsyncFileUpload1.UploadedComplete 
    If e.state = AjaxControlToolkit.AsyncFileUploadState.Success Then 
     '....' 
    Else 
     showErrorMessage(e) 
    End If 
End Sub 

no puede golpear un punto de ruptura en el "if" después de seleccionar un archivo. Supongo que hay algo mal en mi página con respecto a cómo está funcionando Ajax. No estoy seguro de lo que es, sin embargo.

¡CORREGIDO!
Estaba mostrando el cuadro de carga de AJAX a través de un botón de opción con un div visible = verdadero/falso. La respuesta me dijo que el control tiene que estar allí para cargar la página. ¡Me llevé el div y todo funcionó! Ahora haré el show/hide a través de jquery (lo cual debería haber hecho en primer lugar).

Respuesta

8

Asegúrese de que el control de usuario con el control asyncfileupload no se carga de forma asíncrona, por ejemplo, a través de Response.Redirect ("pageWithUploadControl").

¿Ha manejado el evento FileUploadComplete y ha verificado si AsyncFileUploadState es correcto?

Private Sub AsyncFileUpload1_UploadedComplete(ByVal sender As Object, ByVal e As AjaxControlToolkit.AsyncFileUploadEventArgs) Handles AsyncFileUpload1.UploadedComplete 
     If e.state = AjaxControlToolkit.AsyncFileUploadState.Success Then 
      '....' 
     Else 
      showErrorMessage(e) 
     End If 
    End Sub 

    Private Sub showErrorMessage(ByVal e As AjaxControlToolkit.AsyncFileUploadEventArgs) 
     Dim message As String = String.Empty 
     Select Case e.statusMessage 
      Case AjaxControlToolkit.AsyncFileUpload.Constants.Errors.EmptyContentLength 
       message = "Empty content length!" 
      Case AjaxControlToolkit.AsyncFileUpload.Constants.Errors.FileNull 
       message = "Fill NULL!" 
      Case AjaxControlToolkit.AsyncFileUpload.Constants.Errors.InputStreamNull 
       message = "Input Stream NULL!" 
      Case AjaxControlToolkit.AsyncFileUpload.Constants.Errors.NoFileName 
       message = "No File Name!" 
      Case AjaxControlToolkit.AsyncFileUpload.Constants.Errors.NoFiles 
       message = "No Files!" 
     End Select 
     LblMessage.Text = message 
    End Sub 

tratar de cambiar cambiar el enctype de su formulario:

<form id="form1" enctype="multipart/form-data" runat="server"> 
+0

No llega a ese punto de quiebre.¿Eso significa que tengo un problema con mi administrador de scripts? No sé cómo depurar desde aquí ... – Nate

+0

@Nate: ver mi edición e intentar cambiar el enctype del formulario. –

+0

señor, ¿puede hacer una versión C# de este script? Estoy enfrentando el mismo problema ahora mismo. –

3

Hola usted puede hacerlo mediante el uso de OnUploadedComplete="AsyncFileUploadPDF_UploadedComplete" en Cs archivo añadir

protected void AsyncFileUploadPDF_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) 
     { 
      if (AsyncFileUploadImage.HasFile) 
      { 
       Session["AsyncFileUploadPDF"] = AsyncFileUploadImage; 
      } 
     } 

y se puede obtener los datos de la sesión donde quiera que quiera a medida que hago clic en evento del botón

protected void btnSaveParts_Click(object sender, EventArgs e) 
     { 
      AsyncFileUploadPDF = (AsyncFileUpload)Session["AsyncFileUploadPDF"]; 
      PdfFileName = AsyncFileUploadPDF.FileName;   
     } 
+0

Esto es realmente útil.^_^ –

+0

¿Dónde está el archivo? Cómo guardar el archivo? –

3

En caso de que esto ayude a alguien, yo fijo mi problema añadiendo lo siguiente a la etiqueta de formulario:

enctype="multipart/form-data" method="post" 
0

que estaba teniendo el mismo problema, leer e intentaron innumerables mensajes sobre cómo solucionarlo (obviamente una Mucha gente está teniendo este problema) pero nada funcionó. Hasta que sustituyó a la ScriptManager con el ToolkitScriptManager
Cambio:

<asp:ScriptManager ID="ScriptManager2" runat="server" ></asp:ScriptManager> 

con:

<cc1:ToolkitScriptManager ID="ScriptManager2" runat="Server" /> 

No estoy seguro de si esto es requisito en la caja de herramientas más reciente (diciembre de 2013), pero funcionó para yo. Espero que ayude a alguien más también.

Cuestiones relacionadas