Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ASP.NET AJAX : UPDATEPANEL ET FILEUPLOAD


Information sur la source



Description

Pour des raisons de sécurité, le contrôle FileUpload ne fonctionne pas à l'intérieur d'un UpdatePanel. En effet l'UpdatePanel fait ses requêtes de mis à jour partiel en utilisant XmlHttpRequest et l'on ne peut pas envoyer de fichier via cet objet.

Ce code rend possible l'utilisation d'un FileUpload à l'intérieur d'un UpdatePanel, pour cela j'ai créer un nouveau contrôle qui hérite de FileUpload ainsi qu'un HttpModule qui modifie directement le flux de la réponse http. On peut utiliser le classique contrôle FileUpload, l'utilisation d'un tagmapping configuré au niveau du web.config remplace le classique FileUpload par mon FileUpload.
 

Conclusion

Ceci est un prototype, il doit surement se cacher de nombreux bugs.

Dans le zip, il y a 2 projets : un projet qui contient le FileUpload et un autre qui contient une website de test. Pour l'instant le controle UpdateProgress ne fonctionnera pas si vous utiliser un FileUpload dans votre page.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Luc_arne2 le 22/05/2007 15:38:55

Bonjour,

Il me semble qu'il y une façon plus simple de faire celà.
Il suffit d'enregistrer un trigger dans l'updatepanel et de dire que l'on veut un postabck synchrone.

Voir le lien ci-contre pour plus de détail:

http://mobiledeveloper.wordpress.com/2007/05/15/file-upload-with-aspnet-ajax-updatepanel/

Salutations

signaler à un administrateur
Commentaire de jesusonline le 22/05/2007 15:54:18 administrateur CS

Bonjour,

Je pense que tu n'as pas compris l'interet de cette source, c'est justement d'uploader un fichier sans faire un classique postback, sans rafraichir toute la page. Le lien que tu me donne permet seulement de ne pas faire de requete Ajax avec un FileUpload mais un classique postback.

Pour plus d'information regarde ici : http://blogs.codes-sources.com/cyril/archive/2007/05/06/ajax-et-upload-part-2-utilisation-d-un-updatepanel-et-d-un-fileupload.aspx

signaler à un administrateur
Commentaire de necnec le 07/06/2007 12:30:02

j'ai testé ton code mais j'ai une erreur de    
ligne 69             if (HttpContext.Current.Items[typeof(FileUpload)] == null)
+ $exception {"La référence d'objet n'est pas définie à une instance d'un objet."} System.Exception {System.NullReferenceException}

signaler à un administrateur
Commentaire de jesusonline le 09/06/2007 17:28:12 administrateur CS

Je n'ai aucune idée d'ou peut venir l'erreur :s mais attention comme je l'ai déjà dit ce code est vraiment à prendre avec les pincettes et il faut bien le comprendre avant de l'utiliser.

Arrives tu à reproduire l'erreur ? si oui dans quelle situations se produit l'erreur ?

Sinon on (peut etre toi) m'a récemment montré http://www.jeffzon.net/Blog/page/Released-Components.aspx, peut etre que ca t'interessera (je n'ai pas testé le code)

signaler à un administrateur
Commentaire de Samir63 le 11/06/2007 12:20:06

J'ai installé votre exemple, et j'ai la même erreur, peut tu voir (La référence d'objet n'est pas définie à une instance d'un objet) ?

signaler à un administrateur
Commentaire de necnec le 12/06/2007 00:56:26

Ben j'ai voulu seulemnt recomplier le projet et j'obtiens l'erreur donc je peux pas tester les pages test que t'a mis en exemple

signaler à un administrateur
Commentaire de eviral le 27/06/2007 08:56:15

Salut,

Je n'ai pas d'erreur, tout semble fonctionner mais ou se trouve mon fichier uploadé ? La page m'affiche le nbr d'octets transférés mais je ne trouve ce fichier uploadé nulle part... Merci

Fred

signaler à un administrateur
Commentaire de m1ger le 02/07/2007 16:15:04

Bonjour,

Je viens de tester ta solution,
j'ai la même exception que les autres au niveau du test : if (HttpContext.Current.Items[typeof(FileUpload)] == null)
Qui serait à priori du au httpContext.Current qui est à Null.

As tu une idée ?

signaler à un administrateur
Commentaire de jesusonline le 04/07/2007 18:38:37 administrateur CS

@Eviral : le fichier est enregistré nulle part, pour l'enregistrer quelque part c'est comme avec un classique FileUpload c'est à dire en utilisant la méthode file1.SaveAs(fileName);


@NecNec, Samir63, M1ger : je n'arrive pas à reproduire le problème, à quel moment à lieu cette erreur ? lors du premier chargement ? si vous ouvrez la solution contenu dans le zip et faites F5 ca ne fonctionne pas ?

Je rappelle que cette source est un prototype, il faut la voir comme une explication de comment faire marcher les fileupload et les updatepanels. Avant d'utiliser cette astuce sur un site en production je vous conseil de bien comprendre la source.

signaler à un administrateur
Commentaire de m1ger le 04/07/2007 19:14:57

hello,

cette erreur a lieu à chaque chargement, que ce soit le premier, ou en post(call?)back.
Si j'ouvre ta solution telle qu'elle ca me fait l'erreur pareil que si j'insere ton module dans mon propre site.

En effet c'est pour utiliser en production, mais biensur je cherche à comprendre le fonctionnement et éventuellement l'adapter à mes besoins... mais pour ca il faut au moins que je puisse voir le fonctionnement comme tu l'as programmé :o)

pour info :
*   j'ai essayé de faire marcher sur la version express et sur la pro de mon travail ... même combat pour les deux.
*   j'ai une version 2005 sp1 (en anglais pour la pro, en FR pour l'express), et j'ai aussi testé sans le sp1.
*   je pense que ca doit être le httpcontext qui n'est pas transféré/reconnu dans la dll du module.
*   ca doit venir d'un problème de configuration de VS/IIS car pour une même source, certains y arrivent et d'autres non.

Merci encore pour ton aide précieuse !

A+

signaler à un administrateur
Commentaire de jesusonline le 04/07/2007 19:49:45 administrateur CS

"je pense que ca doit être le httpcontext qui n'est pas transféré/reconnu dans la dll du module." ca ne fonctionne pas comme ca :) HttpContext.Current est une propriété statique qui est partagé pour le thread en cours. Ce qui est bizarre c'est que cela voudrais dire que le thread courant n'est pas lié à une requête web, alors que c'est le cas :-/

Il faudrais que je me replonge d'avantage dans le code pour comprendre le problème. Est-ce que le httpcontext est null à chaque fois, es tu sur que c'est le httpcontext qui est null et pas le HttpContext.Current.Items ?

tu utilises IIS ou cassini (le serveur intégré à VS2005) ? sur quel navigateur es tu ? quels OS ?

signaler à un administrateur
Commentaire de m1ger le 04/07/2007 20:08:53

re-salut

merci pour les explications ...

Au passage je suis en train de me demander si justement ce n'est pas le thread qui est différent. Qu'en penses tu ? celà est ce possible ???

Non ce n'est pas réellement le httpcontext qui est à null mais HttpContext.Current (et non HttpContext.Current.Items). Et il est à null à chaque fois.

j'utilise IIS sur ma version pro et cassini (je ne savais pas que ca s'appelai comme ca) sur ma version express.

J'ai testé ta solution avec ie7 et firefox (sur XP et sur Vista) ca ne marche ni dans l'un ni dans l'autre.


Petite précision, si je met des points d'arrêt dans le projet, je me rend compte que la page se recharge en totalité (postback) et non en callback comme j'imagine c'est supposé le faire.
J'ai biensur la dernière version d'ajax.net (et du control Toolkit) installée sur mon poste.

signaler à un administrateur
Commentaire de m1ger le 04/07/2007 23:32:04

c'est encore moi,

A force de débugage pas à pas, j'avance un peu ...
en fait l'exception n'est pas levée à chaque passage dans le get comme je l'ai affirmé dans le message d'avant.

a priori une fonction utilisant ton objet FileUpload.UploadObject pose problème et pas à chaque passage ... c'est la fonction context_PreSendRequestContent de la classe UploadModule.
Elle est appelée 5 fois durant un upload. et l'erreur sur le HttpContext.Current se produit au 3e et au 5e passage ... sinon tout se passe bien !

bizard bizard ... je ne comprend plus rien !

signaler à un administrateur
Commentaire de guilhemberthalon le 19/09/2007 11:50:00



Bonjour Cyril,

j'ai un soucis avec ton control :

J'ai encapsulé ton controle dans un User control qui contient un GridView, le controle FileUpload est chargé lors de la mise en édition d'une ligne.

Le fichier s'upload bien, la réponse est retournée correctement (le gridview n'est plus en edition).

Par contre une fois que le controle a été chargé une première fois, le JavaScript continue a s'executer sur chaque Post, la réponse est donc redirigée et les Post ne fonctionne plus correctement.

J'ai reproduit le problème avec l'exemple que tu as posté sur code source (ajout d'un bouton à l'interieur de l'UpdatePanel), le post sur ce bouton ne fonctionne pas correctement, par contre il fonctionne bien sur un bouton à l'exterieur.

Si tu as une piste pour me decoincer je suis preneur,

merci d'avance,

salutations

Guilhem

signaler à un administrateur
Commentaire de maitredede le 09/10/2007 13:18:51

Bonjour JesusOnline,

Je viens de tester ta source qui m'a l'air intéressante. Mais comme les quelques autres, j'ai le HttpContext.Current qui est à null de temps en temps, et du coup ça génère des exceptions. (Pour info, je développe/teste sous VS2008b2, avec le serveur web intégré)

Si un jour tu as le temps, puis-je te demander d'y jeter un oeil svp ?

Merci d'avance

Dédé

signaler à un administrateur
Commentaire de mnymny le 04/01/2008 09:13:35

I couldnt download this project

signaler à un administrateur
Commentaire de dymsbess le 28/05/2009 21:48:29

L'erreur est signalée à cet endroit quand on utilise la console d'erreur javascript dans Mozilla :

// on stock l'id de l'iframe dans le champ cach?
$get(CS._FileUpload.K_HiddenFieldName).value = '1|' + iframeID;

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

[ASP.Net]Ajax Library et UpdatePanel [ par shadow1779 ] Bonjour, j'ai quelques petits problèmes avec l'updatepanel, j'ai essayé sur mon site que je suis en train de créer comme projet ASP.Net Ajax Enabled UpdatePanel et FileUpload [ par theVince63 ] Bonjour,je voudrai réussir a faire fonctionner un fileupload dans un update panel.  En effet, lorsqu'on créer un post back, le fileupload perd toutes Updatepanel partialrendering fileupload fonctionne une fois [ par wally88 ] Bonjour,J'ai donc un fileupload dans un updatepanel.Le fileupload est en faite celui de cyril (jesusonline) :<a title="Ce fileupload" href="http://blo Ajax UpdatePanel - récupération des évéenemnts [ par SpanK ] Bonjour,J'utilise une application ASP.NET avec AJAX et notament le UpdatePanel.J'ai un timer qui permet la mise à jour de l'updatepanel toutes les 10 ajax - updatepanel [ par waterw72 ] Bonjour,J'ai installé asp.net 2.0 ajax pour mettre " à jour " mon site asp.net 1.0Tout fonctionne très bien  ... mais ...UpdatePanel, ContentTemplate FileUpload AJAX [ par azizar02 ] bonjour tout le monde j'utilise une dll de "Subgurim" pour pouvoir utiliser le control FileUpload dans un UpdatePanel. Le problème c 'est que j'arrive UpdatePanel et FileUpload [ par gabiset ] Bonjour,J'ai une page sur laquelle j'ai un contrôle FileUpload et un bouton pour lancer le upload du fichier choisi par le client. Tout marche très bi Web.config et Ajax Toolkit [ par filip24 ] Bonjour,J'ai un petit soucis.Dans ma page j'ai implementé, avec VS 2005 un AutoCompleteExtender.Sur le serveur de test de Visual Studio, j'ai une erre Utiliser un contrôle Ajax dans ASP.NEt [ par lamyruth ] Bonjour,comment faire pour utiliser un contrôle (dropdownlist) d'Ajax dans mon projet  sousASP.NET 2?(je mexplique:J'ai un projet développé sous VS 20


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,123 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.