2009-04-11 5 views
0

J'utilise ASP.net (2.0) avec VB.NET.Le lien de téléchargement de fichier disparaît lorsque la page est rechargée, pourquoi?

J'ai un formulaire d'inscription d'utilisateur. Sur ce formulaire, l'utilisateur fournit toutes ses coordonnées et il peut télécharger une image avec le contrôle de téléchargement de fichier normal dans ASP.net.

Ceci est mon problème.
Si quelque chose se passe mal sur la page, je donne à l'utilisateur un message d'erreur indiquant ce qu'il a omis ou ce qui s'est mal passé. Mais la page se rafraîchit quand cela arrive. MAINTENANT le lien vers l'image que l'utilisateur a choisi est parti. MAINTENANT, lorsque l'utilisateur corrige son erreur, il pense qu'il télécharge une image mais il ne l'a jamais fait parce que lorsque la page a été chargée, il a supprimé le lien vers son image dans le contrôle de téléchargement du fichier.

Notez que l'utilisateur n'a pas besoin de télécharger une image, il n'y aura donc pas d'erreur lorsque le champ est vide.

Quelqu'un at-il une idée de ce que je dois faire?

Répondre

3

Ce comportement est voulu par la conception. Il s'agit d'une restriction de sécurité imposée par les navigateurs, de sorte que tous les fichiers sont téléchargés à partir des ordinateurs des utilisateurs uniquement par leur action explicite.

Si quelque chose ne va pas lors de la soumission du formulaire, vous devez inviter l'utilisateur à télécharger de nouveau son fichier. C'est la bonne façon de le faire. Pensez-y comme une transaction (tout ou rien).

1

Pour des raisons de sécurité, personne ne peut écrire une valeur dans un champ de fichier en HTML. Vous pouvez télécharger le fichier, puis signaler l'erreur et donner à l'utilisateur un moyen d'annuler le téléchargement. Edit: c'est ce que Bobince décrit plus en détail dans une autre réponse.

3

Je ne pense pas que vous puissiez faire beaucoup. Au cours des dernières années, les navigateurs ont été verrouillés dans le champ de formulaire de fichier pour empêcher les téléchargements au volant. J'aurais un processus séparé pour télécharger la photo.

4

Quelqu'un at-il une idée de ce que je dois faire?

Deux approches habituelles:

  1. forme Ajouter côté client (JavaScript) la validation de sorte que pour la majorité des gens, une erreur s'affiche avant qu'ils ont soumis la forme plutôt que plus tard, côté serveur, date à laquelle le téléchargement aura été perdu.

  2. Donnez à chaque instance de formulaire un ID unique. Lorsqu'un fichier est téléchargé sur un formulaire avec une erreur, stockez ce fichier sur le serveur et enregistrez dans la base de données que le formulaire avec cet ID a un fichier joint. Sur le formulaire de la deuxième chance, inclure l'ID en tant que champ masqué et indiquer visuellement que le fichier téléchargé a été mémorisé. Lors de la soumission, faites glisser le fichier mémorisé et joignez-le à la nouvelle soumission.