2010-02-11 12 views
14

Ich versuche, das Fileupload-Steuerelement in ASP.NET zu verwendenWie richtig das Fileupload-Steuerelement ASP.NET verwendet

meine aktuellen Namespace Setup hier:

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; 

Und in meiner Klasse, ich m nur mit:

FileUpload fileUpload = new FileUpload(); 

jedoch keines der Attribute, die normalerweise Teil von Fileupload sind, scheinen zur Verfügung ... wie .HasFile zu sein. Ich versuche, die Button-Klick-Methode im Code hinter zu machen, ich habe festgestellt, dass die meisten der Verwendung von .HasFile im Code vorne ist, aber es war mein Verständnis, dass dies keine Rolle spielen sollte.

Weiß jemand warum?

Antwort

48

ASP.NET-Steuerelemente sollten lieber in aspx Markup-Datei platziert werden. Das ist die bevorzugte Art, mit ihnen zu arbeiten. Fügen Sie also FileUpload Steuerelement zu Ihrer Seite hinzu. Stellen Sie sicher, dass es alle erforderlichen Attribute einschließlich ID hat und runat:

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

Instanz vom FileUpload1 automatisch in automatisch generiert/aktualisiert * designer.cs-Datei erstellt werden, die eine partielle Klasse für Ihre Seite ist. Sie müssen sich normalerweise nicht darum kümmern, was darin enthalten ist. Nehmen Sie einfach an, dass jedes Steuerelement auf einer aspx-Seite automatisch instanziiert wird.

eine Schaltfläche hinzufügen, die die Post zurück zu tun:

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

zu Ihrer * aspx.cs Datei Dann gehen Sie, wo Sie Ihren Code haben und Button-Klick-Handler hinzuzufügen. In C# sieht es so aus:

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

Und das ist es. Alles sollte wie erwartet funktionieren.

+0

Ich denke, dass es gut funktioniert, wenn Sie fileupload aspx page.But definiert, wenn Entwickler Dateiupload bei aspx.cs Datei erstellen möchten. Wie funktioniert es? – Brian

+0

Ich habe ein Problem, das gleiche Problem, was hier diskutiert wurde.Ich habe fileUpload bei codebehind.So definiert, dass, wenn ich den Knopf drücke, Es hat nichts funktioniert. – Brian

+0

Ich habe auch ein Ereignis für Button definiert. Aber es hat nicht funktioniert, wenn ich es debugge. Button btn = new Buttton.btn.Click + = new EventHandler (btn_onclick); – Brian

1

Statt die FileUpload in Ihrem Code hinter Datei instanziieren, nur erklären, es in Ihrer Markup-Datei (ASPX-Datei):

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

Dann werden Sie in der Lage sein, alle Eigenschaften der Steuerung zuzugreifen, wie HasFile.

1

Das Hinzufügen eines FileUpload-Steuerelements aus dem Code dahinter sollte problemlos funktionieren, wenn die HasFile-Eigenschaft verfügbar sein sollte (z. B. in Ihrem Click-Ereignis).

Wenn die Eigenschaften scheinbar nicht verfügbar sind (entweder als Compilerfehler oder über Intellisense), verweisen Sie wahrscheinlich auf eine andere Variable, als Sie denken.

0

Ich habe bemerkt, dass, wenn Intelligenz für ein Objekt nicht funktioniert, es normalerweise einen Fehler irgendwo in der Klasse über Linie gibt, an der Sie arbeiten.

Die andere Option ist, dass Sie das FileUpload-Objekt nicht als Instanzvariable instanziiert haben. Stellen Sie sicher, der Code:

FileUpload fileUpload = new FileUpload(); 

ist nicht in einer Funktion in Ihrem Code hinter.

0

in Code Meine Lösung hinter war:

System.Web.UI.WebControls.FileUpload fileUpload; 

Ich weiß nicht, warum, aber wenn man ohne Fileupload System.Web.UI.WebControls verwenden es verweist auf YourProject.FileUpload nicht System.Web.UI.WebControls.FileUpload.