Les pages se chargent 2 fois

Résolu
cs_zserge Messages postés 11 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 6 janvier 2007 - 17 oct. 2006 à 21:44
Chimon2005 Messages postés 5 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 27 mai 2008 - 8 oct. 2008 à 16:59
J'ai une masterpage avec une webform, puis 2 usercontrol sur la masterpage et un dans la webform.
je met un point d'arrêt sur le "if(!IspostBack)" de chaque page_load de la masterpage, de la webform et des usercontrols.
Je lance en debug et je passe systématiqement 2 fois dans chaque page_load avant que ma page apparaisse.

Quelqu'un sait il pourquoi,  existe t'il des paramètres pour éviter ce double chargement ?

de mon coté je vais tester 2 webform en même temps dans un masterpage pour voir si ce double chargement se répète.

Merci

11 réponses

cs_zserge Messages postés 11 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 6 janvier 2007
21 oct. 2006 à 09:52
Bonjour,

J'ai trouvé, dans certain usercontrol, j'affectais une couleur de fond plutôt qu'une image
et la propriété backgroungImage recevais une chaine vide. pour reprendre l'exemple du précédent message :
la commande MonUserControl.MonHeader = "";
appelait
MonHeader.style.add(HtmlTextWriterStyle.BackgroundImage,  ResolveUrl(""));
cette commande provoque un 2° chargement du site.
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
18 oct. 2006 à 12:53
Bonjour,

ton problème vient surement du paramètre AutoEventWireup qui se trouve dans la directive de page, lorsque celui ci est a true, asp.net recherche automatiquement une méthode Page_Load (pareil pour init, preinit, etc...) si la méthode existe il la rattache a l'evenement load, donc sois tu supprime le autoeventwireup soit tu ne t'abonnes pas manuellement à cet event.

<hr />Cyril - MVS - MCP
0
cs_zserge Messages postés 11 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 6 janvier 2007
19 oct. 2006 à 00:14
Si je met autoeventwireup = false, je ne passe nul part. Le problème survient uniquement avec les usercontrols.
Je pense que mon vrai problème vient du fait que, étant programmeur C# winform, je me sent obligé d'utiliser des objets pour faire de jolis blocs comme ceux qui se trouvent à gauche sur ce site. Je pense que je vais me pencher sérieusement sur "comment on structure une page html sans passer par la programmation objet pour les nuls".

Si quelqu'un connait un éditeur html compatible avec les formats aspx et .master, une documentation sur comment créer et dimensionner des tableaux en html, des tutos...

En attendant je vais aller chercher un bon verre de courage de cette vielle bouteille d'Islay...

Merci Jesus.
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
19 oct. 2006 à 01:31
La connaissance du HTML / JavaScript / HTTP sont des notions indispensables a tous developpeurs Web. Malheureusement ils existent beaucoup trop de "developpeurs web" qui savent à peine ce que c'est que HTTP :-(

Pour ce qui est de l'approche Objet, les blocs qu'on a sur la gauche sont des "UserControls" (c'est un poil plus compliqué mais en gros c'est ca ;-))

Par contre ce que je ne comprend pas c'est pourquoi tu passes 2 fois par le page_load ... :-/ J'ai une idée ! Chaque requête a une vie définit dés que le contenu HTML est envoyé le thread d'execution de la requete meurt, lorsqu'on clique sur un bouton on fait une nouvellle requete HTTP vers la page donc cela repasse forcemeent par le page_load pour savoir si c'est la requete vient d'une "nouvelle page" ou d'un click sur un bouton (PostBack) il existe la propriété IsPostBack de l'objet Page qui renvoie true si la page provient d'un postback.

<hr />Cyril - MVS - MCP
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_zserge Messages postés 11 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 6 janvier 2007
19 oct. 2006 à 08:10
la 2° fois ou je passe dans mes page_load le IsPostBack est false, ce qui veut dire que ce n'est pas un PostBack, d'ailleurs c'est logique puisqu'a ce moment là la première page du site n'est toujours pas apparue.
Voici le cheminement:
    page_load du webform
    page_load de la masterpage
    page_load de chaque usercontrol
    code html de la webform
    code html de la masterpage
    code html de chaque usercontrol
    puis retour au début de la liste pour un second passage.

Je pense que c'est la construction des usercontrols qui provoque une seconde requete. Je vais me pencher plus en détail sur leur appel.

A+
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
19 oct. 2006 à 12:13
Tu peux nous montrer un peu de code, car ce que tu décrit n'a pas l'air normal :-/

<hr />Cyril - MVS - MCP
0
cs_zserge Messages postés 11 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 6 janvier 2007
19 oct. 2006 à 23:29
Je veut bien t'envoyer un projet, je t'ai envoyé un message privé.
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
20 oct. 2006 à 02:21
Je préfére traiter les problèmes directement dans le forum afin de permettre à tous le monde de voir le problème ;-) Essaye de mettre juste le nécessaire :-)

Si ce n'est pas possible tu n'as qu'a m'envoyé un mail et on expliquera le problème ici :-)

<hr />Cyril - MVS - MCP
0
cs_zserge Messages postés 11 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 6 janvier 2007
20 oct. 2006 à 08:03
Je pense avoir isolé le problème:

on crée un usercontrol (.ascx), on met un tableau de 1 ligne 1 colonne la ligne est runat server avec un ID="MonHeader" de façon à pouvoir définir le style de la ligne dans le code behind.
on crée un getteur et un setteur pour affecter une propriété à la ligne, elle contiendra le chemin de l'image de fond. (HeaderBgImage)

dans le page_load du composant on définit le style d'une ligne de la manière suivante

MonHeader.style.add(HtmlTextWriterStyle.BackgroundImage,  ResolveUrl(this.HeaderBgImage));

Il ne reste plus qu'a affecter une url à la propriété du composant depuis la webform ou la masterpage qui contient le usercontrol de la façon suivante :

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            MonUserControl.MonHeader = "~/Image/fond.gif";
        }
    }
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
21 oct. 2006 à 12:14
Cool, j'ai pas encore eu le temps de regarder ... :p

Cette commande ne provoque pas vraiment un 2eme chargement de la page, mais le navigateur ne savant pas ou chercher l'image essaye de charger l'image à partir de la page courante donc il refait une requete sur cette page ... :) c'est pour ca que tu avais 2 requetes, une pour la page et une pour l'image :-)

<hr />Cyril - MVS - MCP
0
Chimon2005 Messages postés 5 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 27 mai 2008
8 oct. 2008 à 16:59
Salut !
Je viens d'avoir le même problème, et je remercie aspfr de m'avoir fait comprendre le principe si vite :)

J'en profite pour conseiller par conséquent, quand on manipule des dont le ImageUrl est rempli dynamiquement (typiquement dans un outil de gestion d'images, sur lequel je bosse en ce moment):
si aucune image physique n'existe, faire le test, et mettre le contrôle en Visible=false.

Surtout ne pas mettre de champ ImageUrl à string.Empty, ou à "#", ou des merdes dans le genre (oui,  j'avais osé).

Bonne journée.
0
Rejoignez-nous