So che l'argomento non è nuovo ma anche guardando negli arretrati e in rete non ne esco:
Ho un updatepanel che contiene un formview (agganciato a un datasource con i suoi insert/update nella parte aspx) che contiene a sua volta un controllo fileupload.
Ho 2 problemi:
Numero 1 - lettura del nomefile per salvataggio dell'info in db
Nell'evento inserting e updating del datasource lanciavo una funzione che andava a leggere il nome del file ed a valorizzare il parametro per l'insert/update.
codice:
Protected Sub nomiallegati(ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs, ByVal Optional tor As String = "R")
Dim nomefile = ""
.......
Dim flup As FileUpload = FormView2.FindControl("FileUpload1")
If flup.HasFile Then
Dim NomeCompleto = flup.FileName
Dim Delim1 = InStrRev(NomeCompleto, "/")
Dim Delim2 = InStrRev(NomeCompleto, "\")
If Delim1 > Delim2 Then
nomefile = Right(NomeCompleto, Len(NomeCompleto) - Delim1)
Else
nomefile = Right(NomeCompleto, Len(NomeCompleto) - Delim2)
End If
e.Command.Parameters("@rk_allegato").Value = Trim(Right(nomefile, 100))
End If
End Sub
Grazie all'updatepanel il mio fileupload risulta non avere mai files (hasfiles è sempre false).
In rete ho trovato di tutto e ho anche provato tutto ma senza capirci niente.
Ho letto che il form dev'essere di tipo multipart-formdata perciò nel load di pagina ho aggiunto
Page.Form.Attributes.Add("enctype", "multipart/form-data")
.... senza risultati.
Poi ho letto che il controllo dev'essere aggiunto ai triggers dell'updatepanel (ma perchè poi?) e allora ho aggiunto anche
fupl = FormView2.FindControl("FileUpload1")
ScriptManager.GetCurrent(Me).RegisterPostBackContr ol(fupl)
ma questo oltre a non dare risultati mi porta un eccezione più o meno così
Control with ID 'FileUpload1' being registered through RegisterAsyncPostBackControl or RegisterPostBackControl must implement either INamingContainer, IPostBackDataHandler, or IPostBackEventHandler.
Insomma sono ancora al palo e non riesco a tirar fuori il nome del file indicato nel fileupload... mi serve vs graditissimo aiuto.
Numero 2 - caricamento del file
Non so se risolvendo il problema 1 si risolva anche questo comunque la mia tecnica era di fare l'insert/update dei dati del formview e poi, negli eventi inserted e updated del datasource, lanciare la funzione seguente che fisicamente carica i files sul server
codice:
Protected Sub caricafile(ByVal conto As String, ByVal codice As String, ByVal Optional tor As String = "R")
...........
'prendo i file allegati e li carico nella apposita directory
Try
Dim hfc As HttpFileCollection = Request.Files
For i As Integer = 0 To hfc.Count - 1
Dim hpf As HttpPostedFile = hfc(i)
If hpf.ContentLength > 0 Then
hpf.SaveAs(ConfigurationManager.AppSettings("uplpath") & Path.GetFileName(hpf.FileName))
End If
Next
Catch ex As Exception
' Handle your exception here
End Try
End Sub
Con l'updatepanel il gioco non funziona più perchè i Request.files, guarda un po', sono sempre vuoti... ma dove diavolo vanno a finire??
Si noti che l'uplaod devo farlo assolutamente dopo aver eseguito l'update/insert.