begin process at 2012 02 08 21:07:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

ASP.Net

 > ASP.NET AJAX : UPDATEPANEL ET FILEUPLOAD

ASP.NET AJAX : UPDATEPANEL ET FILEUPLOAD


 Information sur la source

Note :
Aucune note
Catégorie :ASP.Net Source .NET ( DotNet ) Classé sous :updatepanel, fileupload, ajax Niveau :Expert Date de création :06/05/2007 Vu / téléchargé :28 914 / 2 006

Auteur : jesusonline

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note


 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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source .NET (Dotnet) UTILISATION DE LA MÉTHODE SORT ET SORTDIRECTION AVEC UN GRID...
Source .NET (Dotnet) RESPONSE.FILTER : MANIPULATION DU STREAM DE SORTIE ASP.NET
Source avec Zip Source .NET (Dotnet) OPTIMISATION DE LA SERIALISATION JSON POUR LES LIST<T>
Source avec Zip Source .NET (Dotnet) CRAWLABLELINKBUTTON : UPDATEPANEL ET RÉFÉRENCEMENT
Source .NET (Dotnet) POSTBACKCONTROL - COMMUNICATION CLIENT/SERVEUR AVEC LES UPDA...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) GUESTBOOK AVEC GRIDVIEW par DanMor498
Source avec Zip CHECKED DROPDOWNLIST par fredzool
Source avec Zip Source avec une capture Source .NET (Dotnet) GRIDVIEW WITH TREEVIEW AND CALLBACK par fredzool
Source avec Zip APPELLER UN WEBSERVICE DEPUIS JAVASCRIPT par fredzool
Source avec Zip Source .NET (Dotnet) MONEY TEXTBOX WITH EMBEDED JAVASCRIPT par fredzool

 Sources en rapport avec celle ci

CREATION D'UN AUTOCOMPLETE JQUERY AVEC UN CODE SOURCE ASP ET... par dedebis84
Source avec Zip Source .NET (Dotnet) CRAWLABLELINKBUTTON : UPDATEPANEL ET RÉFÉRENCEMENT par jesusonline
Source .NET (Dotnet) POSTBACKCONTROL - COMMUNICATION CLIENT/SERVEUR AVEC LES UPDA... par jesusonline
Source avec Zip Source .NET (Dotnet) [.NET 2.0] GRIDVIEW EN AJAX par gldfdp
Source avec Zip Source avec une capture Source .NET (Dotnet) ONGLETS DYNAMIQUES POUR ASP.NET par s_shadow

Commentaires et avis

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

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

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}

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)

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) ?

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

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

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 ?

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.

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+

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 ?

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.

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 !

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

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é

Commentaire de mnymny le 04/01/2008 09:13:35

I couldnt download this project

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;

Commentaire de gyzmau le 17/08/2009 19:40:50

Bonjour,

après quelques recherches j'ai une piste.
Si l'évènement ou le Context courant est null est appelé après EndRequest alors il est a null.
Et si on désactive le buffer on passe avant
((HttpApplication)sender).Response.Buffer = false;
Mais je sais pas pourquoi il y avait tjs une erreur sur le context qui trainait.

Au final on s'aperçoit que le httpContext est null mais le Application.context lui est valide.

Pour le moment si je rajoute  les lignes suivantes dans context_PreSendRequestHeaders et context_PreSendRequestContent tous marchera:
  if (HttpContext.Current == null)
                HttpContext.Current = application.Context;
/*application correspond a notre HttpApplication évidement*/

Par contre ca explique toujours pas pourquoi le httpContext.Current se retrouve a null.

Comme tjs c'est de la bidouille quand même car je sais pas le pkoi du comment alors attention en prod.

Commentaire de C _ Line le 18/12/2009 12:02:55

Mecri beaucoup, le code fonctionne très bien. Suffit de protéger les paramètres d'entrée, comme dans toute méthode. HttpContext.Current est effectivement nul, il faut juste ajouter les test comme l'explique Gyzmau. Temps de correction : 30 secondes ? Sinon le tout fonctionne très bien, c'est tout ce que je recherchais, ça me fait gagner beaucoup de temps. Et Jesus, jamais eu le temps de te remercier, mais tes commentaires sur les forums m'ont déjà aidée par le passé donc thx pour ton travail :)

Commentaire de C _ Line le 18/12/2009 16:37:00

Dans la classe FileUpload, il y a un soucis lorsqu'on souhaite utiliser plusieurs FileUpload sur une même page. Il faut changer la façon de construire le référencement au javascript dans la méthode prerender de la classe FileUpload :


protected override void OnPreRender(EventArgs e)
{
    if (ScriptManager.GetCurrent(this.Page) != null && ScriptManager.GetCurrent(this.Page).EnablePartialRendering)
    {
        ScriptManager.GetCurrent(this.Page).RegisterScriptControl<FileUpload>(this);

        if (!UploadObject.IsFileUploadRegistered)
        {
            UploadObject.IsFileUploadRegistered = true;
            StringBuilder sb = new StringBuilder();
            sb.Append("Sys.Application.add_init(function(){CS.FileUpload.addFileUploadElements([");
            int i = 0;
            foreach (FileUpload fileUpload in UploadObject.FileUploads)
            {
                if (i > 0)
                    sb.Append(",");
                sb.Append("'").Append(fileUpload.ClientID).Append("'");
                i++;
            }
            sb.Append("])});");
            ScriptManager.RegisterStartupScript(this, typeof(FileUpload), "RegisterFileUploads", sb.ToString(), true);
        }
    }
    base.OnPreRender(e);
}

Commentaire de alainhol le 21/12/2009 14:36:19

On ne peut utiliser un controle FileUpload en asynchpostback dans un UpdatePanel, seulement en postback, ce qui bien sur... ce que je fait moi c'est:

dans la page ou j'ai besoin d'utiliser le FileUpload, j'insere un controle Literal, ensuite, dans la page de code j'initialise le literal avec litrale1.Text = "<iframe style=\"border:0;...;...;\" id=\"if_UploadFile\" src=\"MyFileUpload.aspx?...\" ...>"; en passant les parametres que j'ai besoin a cette page

Ensuite, dans le fichier MyFileUpload.aspx j'insere les controls habituels avec le fileupload en SYNCHPOST et voila le tour est jouer. le meme effet que si vous etiez dans la meme page utilisant le modele asynchpostback

:o)

Alain


 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 FileUpload en Ajax et refresh d'Image [ par bmouget ] Bonjour, J'utilise le controle FileUpload dans une page ASP.NET Ajax. Pour que celui-ci fonctionne en Ajax, j'ai ajouter un trigger. Cette page me p 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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,368 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales