2010-02-11 17 views
14

Sto cercando di utilizzare il controllo FileUpload in ASP.NETCome utilizzare correttamente il controllo ASP.NET FileUpload

Qui è la mia attuale configurazione dello spazio dei nomi:

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 

E all'interno della mia classe, ho' m usando solo:

FileUpload fileUpload = new FileUpload(); 

Tuttavia, nessuno degli attributi che sono normalmente parte di FileUpload sembrano essere disponibili ... come .HasFile. Sto tentando di fare il metodo Button click nel codice sottostante, ho notato che la maggior parte dell'uso di .HasFile si trova nel codice in testa, tuttavia ho capito che questo non avrebbe dovuto importare.

Qualcuno sa perché?

risposta

48

I controlli ASP.NET devono essere inseriti nel file di markup aspx. Questo è il modo preferito di lavorare con loro. Quindi aggiungi il controllo FileUpload alla tua pagina. Assicurarsi che ha tutti gli attributi richiesti, tra cui ID e runat:

<asp:FileUpload ID="FileUpload1" runat="server" /> 

grado delle FileUpload1 verrà creato automaticamente nel file di aggiornamento * auto-generata/.designer.cs che è una classe parziale per la tua pagina. Di solito non devi preoccuparti di ciò che è contenuto, ma presumi che qualsiasi controllo su una pagina di aspx venga automaticamente istanziato.

Aggiungere un pulsante che farà il palo:

<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 

Poi vai al proprio file * .aspx.cs in cui si dispone il codice e aggiungere il pulsante scatto gestore. In C# appare così:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    if (this.FileUpload1.HasFile) 
    { 
    this.FileUpload1.SaveAs("c:\\" + this.FileUpload1.FileName); 
    } 
} 

E questo è tutto. Tutto dovrebbe funzionare come previsto.

+0

Penso che funzionerà bene se hai definito fileupload alla pagina aspx. Ma se lo sviluppatore vuole creare fileupload nel file aspx.cs. Funziona? – Brian

+0

Ho un problema analogo a ciò che è stato discusso qui. Ho definito fileUpload al codebehind. Così, quando premo il pulsante, non ha funzionato nulla. – Brian

+0

Ho anche definito un evento per il pulsante. Ma non ha funzionato quando eseguo il debug. Button btn = new Buttton.btn.Click + = new EventHandler (btn_onclick); – Brian

1

Invece di istanziare la FileUpload nel codice dietro file di, basta dichiararlo nel file di markup (file aspx):

<asp:FileUpload ID="fileUpload" runat="server" /> 

Allora si sarà in grado di accedere a tutte le proprietà del controllo, come ad esempio HasFile.

1

L'aggiunta di un controllo FileUpload dal codice sottostante dovrebbe funzionare correttamente, dove deve essere disponibile la proprietà HasFile (ad esempio nell'evento Click).

Se le proprietà non sembrano essere disponibili (come errore del compilatore o tramite intellisense), probabilmente stai facendo riferimento a una variabile diversa da quella che pensi di essere.

0

Ho notato che quando l'intelligenza non funziona per un oggetto, di solito c'è un errore da qualche parte nella classe sopra la linea su cui stai lavorando.

L'altra opzione è che non è stato istanziato l'oggetto FileUpload come variabile di istanza. assicurati che il codice:

FileUpload fileUpload = new FileUpload(); 

non è all'interno di una funzione nel codice dietro.

0

La mia soluzione in codice dietro era:

System.Web.UI.WebControls.FileUpload fileUpload; 

Non so perché, ma quando si utilizza FileUpload senza System.Web.UI.WebControls si fa riferimento a YourProject.FileUpload non System.Web.UI.WebControls.FileUpload.

Problemi correlati