Hoe de ASP.NET FileUpload-besturing correct te gebruiken

Ik probeer het FileUpload-besturingselement in ASP.NET te gebruiken

Dit is mijn huidige naamruimteconfiguratie:

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;

En in mijn klas gebruik ik alleen:

FileUpload fileUpload = new FileUpload();

Echter, geen van de attributen die normaal deel uitmaken van FileUpload lijken beschikbaar te zijn… zoals .HasFile. Ik probeer de Button-klikmethode in de code erachter te maken, ik heb gemerkt dat het grootste deel van het gebruik van .HasFile in de code ervoor staat, maar ik heb begrepen dat dit er niet toe zou moeten doen.

Weet iemand waarom?


Antwoord 1, autoriteit 100%

ASP.NET-besturingselementen moeten in plaats daarvan in het aspx-opmaakbestand worden geplaatst. Dat is de voorkeursmanier om met hen samen te werken. Dus voeg FileUploadcontrole toe aan je pagina. Zorg ervoor dat het alle vereiste attributen heeft, inclusief IDen runat:

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

Instance van FileUpload1wordt automatisch aangemaakt in het automatisch gegenereerde/bijgewerkte *.designer.cs-bestand dat een gedeeltelijke klasse is voor uw pagina. Je hoeft je meestal niet druk te maken over wat erin staat, ga er gewoon vanuit dat elk besturingselement op een aspx-pagina automatisch wordt geïnstantieerd.

Voeg een knop toe die de post terug doet:

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

Ga dan naar je *.aspx.cs-bestand waar je je code hebt en voeg een klik-handler toe. In C# ziet het er zo uit:

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

En dat is het. Alles zou moeten werken zoals verwacht.


Antwoord 2, autoriteit 2%

In plaats van de FileUploadin uw code achter het bestand te instantiëren, declareert u het gewoon in uw opmaakbestand (.aspx-bestand):

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

Dan heb je toegang tot alle eigenschappen van het besturingselement, zoals HasFile.


Antwoord 3, autoriteit 2%

Het toevoegen van een FileUpload-besturingselement vanuit de code erachter zou prima moeten werken, waar de eigenschap HasFile beschikbaar zou moeten zijn (bijvoorbeeld in uw Click-gebeurtenis).

Als de eigenschappen niet beschikbaar lijken te zijn (hetzij als een compilerfout of via intellisense), verwijst u waarschijnlijk naar een andere variabele dan u denkt.


Antwoord 4, autoriteit 2%

Mijn oplossing in code erachter was:

System.Web.UI.WebControls.FileUpload fileUpload;

Ik weet niet waarom, maar als je FileUpload gebruikt zonder System.Web.UI.WebControls, verwijst het naar YourProject.FileUploaden niet naar System .Web.UI.WebControls.FileUpload.


Antwoord 5

Ik heb gemerkt dat wanneer intelligentie niet werkt voor een object, er meestal een fout is ergens in de klasse hierboven waar je aan werkt.

De andere optie is dat u het FileUpload-object niet als instantievariabele hebt geïnstantieerd. zorg ervoor dat de code:

FileUpload fileUpload = new FileUpload();

bevindt zich niet in een functie in je code erachter.


Antwoord 6

Oude vraag, maar toch, als het iemand kan helpen, hier is een compleet voorbeeld

<form id="form1" runat="server">
    <div>
        <asp:FileUpload ID="FileUpload1" runat="server" /><br/>
        <asp:Button ID="Button1" runat="server" Text="Upload File" OnClick="UploadFile" /><br/>
        <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
    </div>
</form>

In uw achterliggende code, C#-code om het bestand op te halen en op te slaan in de directory

protected void UploadFile(object sender, EventArgs e)
    {
        //folder path to save uploaded file
        string folderPath = Server.MapPath("~/Upload/");
        //Check whether Directory (Folder) exists, although we have created, if it si not created this code will check
        if (!Directory.Exists(folderPath))
        {
            //If folder does not exists. Create it.
            Directory.CreateDirectory(folderPath);
        }
       //save file in the specified folder and path
        FileUpload1.SaveAs(folderPath + Path.GetFileName(FileUpload1.FileName));
        //once file is uploaded show message to user in label control
        Label1.Text = Path.GetFileName(FileUpload1.FileName) + " has been uploaded.";
    }

Bron: Bestand uploaden in ASP.NET (webformulier upload controle voorbeeld)

Other episodes