ASP.NET AJAX : UPDATEPANEL ET FILEUPLOAD

Signaler
Messages postés
2
Date d'inscription
mardi 22 mai 2007
Statut
Membre
Dernière intervention
22 mai 2007
-
Messages postés
1
Date d'inscription
mercredi 19 novembre 2008
Statut
Membre
Dernière intervention
21 décembre 2009
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42589-asp-net-ajax-updatepanel-et-fileupload

Messages postés
1
Date d'inscription
mercredi 19 novembre 2008
Statut
Membre
Dernière intervention
21 décembre 2009

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 = ""; 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
Messages postés
4
Date d'inscription
jeudi 6 octobre 2005
Statut
Membre
Dernière intervention
18 décembre 2009

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);
}
Messages postés
4
Date d'inscription
jeudi 6 octobre 2005
Statut
Membre
Dernière intervention
18 décembre 2009

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 :)
Messages postés
1
Date d'inscription
jeudi 3 décembre 2009
Statut
Membre
Dernière intervention
17 août 2009

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.
Afficher les 21 commentaires