web-dev-qa-db-fra.com

Comment utiliser correctement le contrôle ASP.NET FileUpload

J'essaie d'utiliser le contrôle FileUpload dans ASP.NET

Voici la configuration actuelle de mon espace de noms:

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;

Et dans ma classe, j'utilise simplement:

FileUpload fileUpload = new FileUpload();

Cependant, aucun des attributs faisant normalement partie de FileUpload ne semble être disponible ... tel que .HasFile. J'essaye de faire la méthode de clic de bouton dans le code derrière, j'ai remarqué que la plupart de l'utilisation de .HasFile est dans le code devant, cependant je croyais comprendre que cela ne devrait pas avoir d'importance.

Quelqu'un sait-il pourquoi?

18
Hosemeyer

Les contrôles ASP.NET doivent plutôt être placés dans un fichier de balisage aspx. C'est la manière préférée de travailler avec eux. Ajoutez donc le contrôle FileUpload à votre page. Assurez-vous qu'il possède tous les attributs requis, y compris ID et runat:

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

L'instance de FileUpload1 sera automatiquement créée dans le fichier * .designer.cs généré/mis à jour automatiquement, qui est une classe partielle de votre page. Habituellement, vous n'avez pas à vous soucier de ce qu'il contient, supposez simplement que tout contrôle sur une page aspx est automatiquement instancié.

Ajouter un bouton qui fera le post retour:

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

Ensuite, allez dans votre fichier * .aspx.cs où vous avez votre code et ajoutez le gestionnaire de clic sur le bouton. En C #, cela ressemble à ceci:

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

Et c'est tout. Tout devrait fonctionner comme prévu.

53
Maciej

Au lieu d'instancier la FileUpload dans votre fichier code behind, déclarez-le simplement dans votre fichier de balisage (fichier .aspx):

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

Vous pourrez ensuite accéder à toutes les propriétés du contrôle, telles que HasFile.

1
wsanville

L'ajout d'un contrôle FileUpload à partir du code situé derrière devrait fonctionner correctement, la propriété HasFile devant être disponible (par exemple dans votre événement Click). 

Si les propriétés ne semblent pas être disponibles (soit comme une erreur du compilateur, soit via intellisense), vous faites probablement référence à une variable différente de celle que vous croyez.

1
tbischel

Ma solution dans le code derrière était:

System.Web.UI.WebControls.FileUpload fileUpload;

Je ne sais pas pourquoi, mais lorsque vous utilisez FileUpload sans System.Web.UI.WebControls il fait référence à YourProject.FileUpload not System.Web.UI.WebControls.FileUpload .

0
Josef

J'ai remarqué que lorsque l'intellisence ne fonctionne pas pour un objet, il y a généralement une erreur quelque part dans la classe au-dessus de la ligne sur laquelle vous travaillez.

L'autre option est que vous n'avez pas instancié l'objet FileUpload en tant que variable d'instance. assurez-vous que le code:

FileUpload fileUpload = new FileUpload();

n'est pas à l'intérieur d'une fonction dans votre code derrière.

0
Edison