2009-05-20 12 views
1

Je crée des contrôles FileUpload lors de l'exécution. Lorsque je clique sur un LinkButton un nouveau contrôle FileUpload est généré.Maintenance de ViewState pour le contrôle FileUpload

Supposons maintenant que j'ai sélectionné un fichier à partir d'un contrôle FileUpload et que je clique sur le LinkButton. Le contrôle FileUpload précédent perd son chemin. Cependant, je suis maintenant le ViewState de chaque contrôle que je crée à l'exécution en utilisant cette ligne:

f1.enableviewstate = true; 

Comment puis-je maintenir le fichier sélectionné pour un contrôle FileUpload? Envisager si vous en avez vraiment besoin lors de l'exécution?

Répondre

0
  1. Si vous en avez vraiment besoin à l'exécution; N'oubliez pas de l'ajouter à la propriété Controls du conteneur le plus proche. En faisant cela s'assure que son état est sérialisé au ViewState.

Hope this helps ...

1

Vous ne pouvez pas pré-sélectionner un chemin de fichier dans la balise d'entrée de téléchargement de fichiers (sécurité liés - l'utilisateur doit sélectionner le fichier), de sorte que .Net est impossible de remplir la valeur de viewstate.

2

étapes

  1. utilisateur sélectionne un fichier
  2. utilisateur
  3. cliquez sur LinkButton (émet un postback qui ajoute le contrôle de téléchargement de fichiers supplémentaires) côté serveur
  4. devrait obtenir le fichier sur postback et le stocker quelque part (n'importe où)
  5. remplacez d'abord <input type=file> avec quelque chose comme l'étiquette et l'icône de coche (pour indiquer à l'utilisateur que le fichier a déjà été téléchargé (ou même une zone de texte en lecture seule avec désactivéBouton pour fausser le contrôle de téléchargement de fichier - mais vous ne serez pas capable d'afficher le chemin de fichier correct dedans)
  6. L'utilisateur est présenté avec un nouveau formulaire qui a un nouveau contrôle de téléchargement de fichier vide en montrant les fichiers déjà téléchargés.

Pour des raisons de sécurité, vous ne pouvez pas manipuler <input type=file> de quelque manière que ce soit.

approche Hack
Si je vous ai bien compris votre bouton de lien AJOUTE commandes de téléchargement de fichiers supplémentaires à votre page. Au lieu de cela, je créerais un nombre suffisant de contrôles de téléchargement la première fois et n'en afficherais qu'un seul. D'autres seraient cachés par CSS. Lorsque l'utilisateur clique sur le LinkButton, il ne disposera cependant que d'une fonctionnalité Javascript côté client qui révélerait un contrôle supplémentaire. Et un autre ... et un autre ... et un autre ... jusqu'à ce que le maximum soit atteint.

approche complexe
Vous pouvez cependant le faire d'une manière différente en utilisant plus Javascript et le rendre plus Web 2.0 ish.Vous devez cependant télécharger ces fichiers via

2

Comme certains des autres mentionnés, vous ne pouvez pas conserver viewstate d'un FileUpload en raison de problèmes de sécurité. Ce que vous pouvez faire est d'ajouter simplement une étiquette juste en dessous de FileUpload. Lorsque l'utilisateur clique sur le bouton link pour générer un nouveau FileUpload, une publication sera lancée pour vérifier si les contrôles FileUpload présents sur la page ont une valeur (c'est-à-dire si l'utilisateur a déjà sélectionné un fichier à télécharger), et si oui , vous pouvez directement commencer à télécharger ce fichier et afficher le résultat (le chemin ou le nom de fichier) sur l'étiquette, juste que l'utilisateur sait qu'il a déjà ajouté ce fichier. Vous pouvez également masquer le fileupload et ajouter un lien de suppression pour supprimer à nouveau le fichier téléchargé (approche similaire à Gmail).

J'espère que cela a aidé.

Juri

+0

Je pensais aussi à cette approche .... Je pense maintenant devrait utiliser cela. –

0

selon moi, il n'y a aucun moyen de persister ViewState fileupload dans asps.net.

u peut stocker sa valeur dans le champ caché, session de fichier etc u ne peut pas être en mesure d'attribuer cette valeur à déposer à nouveau le téléchargement, car il est en lecture seule