2010-02-11 6 views
14

Je suis en train d'utiliser le contrôle FileUpload dans ASP.NETComment utiliser correctement le contrôle ASP.NET FileUpload

Voici ma configuration actuelle de l'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 au sein de ma classe, je m juste en utilisant:

FileUpload fileUpload = new FileUpload(); 

Cependant, aucun des attributs qui font normalement partie de FileUpload semblent être disponibles ... tels que .HasFile. J'essaye de faire la méthode de clic de bouton dans le code derrière, j'ai noté que la majeure partie de l'utilisation de .HasFile est dans le code en avant, cependant j'ai cru comprendre que cela ne devrait pas importer.

Est-ce que quelqu'un sait pourquoi?

Répondre

48

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

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

instance de FileUpload1 sera automatiquement créé dans généré automatiquement/jour * fichier .designer.cs qui est une classe partielle pour votre page. Vous n'avez généralement pas à vous préoccuper de ce qu'il contient, supposons simplement que tout contrôle sur une page ASPX est automatiquement instancié.

Ajouter un bouton qui fera le retour après:

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

Ensuite, allez dans le dossier de votre * où vous avez votre code et ajouter le bouton gestionnaire de clic. En C#, il 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.

+0

Je pense que cela fonctionnera très bien si vous avez défini fileupload à la page aspx.Mais si le développeur veut créer fileupload au fichier aspx.cs.Comment ça marche? – Brian

+0

J'ai eu un problème même cette question ce qui a été discuté ici.J'ai défini fileUpload à codebehind.Ainsi, quand j'appuie sur le bouton, il n'a rien fait. – Brian

+0

J'ai également défini un événement pour le bouton. Mais cela n'a pas fonctionné quand je l'ai débogué. Bouton btn = nouveau Buttton.btn.Click + = nouveau EventHandler (btn_onclick); – Brian

1

Au lieu d'instancier le FileUpload dans votre code derrière fichier, il suffit de déclarer dans votre fichier de balisage (fichier .aspx):

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

Ensuite, vous pourrez accéder à toutes les propriétés du contrôle, tel que HasFile.

1

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

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

0

J'ai remarqué que lorsque 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 dans une fonction dans votre code derrière.

0

Ma solution dans le code derrière était:

System.Web.UI.WebControls.FileUpload fileUpload; 

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

Questions connexes