Les pages se chargent 2 fois [Résolu]

Signaler
Messages postés
11
Date d'inscription
samedi 20 décembre 2003
Statut
Membre
Dernière intervention
6 janvier 2007
-
Messages postés
5
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
27 mai 2008
-
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

Messages postés
11
Date d'inscription
samedi 20 décembre 2003
Statut
Membre
Dernière intervention
6 janvier 2007

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.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
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
Messages postés
11
Date d'inscription
samedi 20 décembre 2003
Statut
Membre
Dernière intervention
6 janvier 2007

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.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
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
Messages postés
11
Date d'inscription
samedi 20 décembre 2003
Statut
Membre
Dernière intervention
6 janvier 2007

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+
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
Tu peux nous montrer un peu de code, car ce que tu décrit n'a pas l'air normal :-/

<hr />Cyril - MVS - MCP
Messages postés
11
Date d'inscription
samedi 20 décembre 2003
Statut
Membre
Dernière intervention
6 janvier 2007

Je veut bien t'envoyer un projet, je t'ai envoyé un message privé.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
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
Messages postés
11
Date d'inscription
samedi 20 décembre 2003
Statut
Membre
Dernière intervention
6 janvier 2007

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";
        }
    }
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
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
Messages postés
5
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
27 mai 2008

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.