Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1896 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C# .NET 2.0] Un contrôle ajouté disparaît qd on reload la page

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C# .NET 2.0] Un contrôle ajouté disparaît qd on reload la page

n°1500990
Roodie
Posté le 09-01-2007 à 22:45:27  profilanswer
 

Bonjour à tous :)
 
Voici ce que mon code fait :  
- au chargement de la page .aspx, il ajoute un label à "myDiv" (qui est un <div runat="server /> )
- qd j'appuie sur le bouton, le label disparaît. Or, je ne veux pas qu'il disparaisse...
Voici mon code, très simple :  

Code :
  1. protected void Page_Load(object sender, EventArgs e)
  2.   {
  3.     if (!IsPostBack)
  4.     {
  5.       AddLabel();
  6.     }
  7.   }
  8.   protected void myButton_Click(object sender, EventArgs e)
  9.   {
  10.   }
  11.   private void AddLabel()
  12.   {
  13.     Label label = new Label();
  14.     label.Text = "myLabel";
  15.     myDiv.Controls.Add(label);
  16.   }


Comment puis-je faire pour que le label ajouté ne disparaisse pas qd j'appuie sur le bouton ?  
Merci beaucoup :)

mood
Publicité
Posté le 09-01-2007 à 22:45:27  profilanswer
 

n°1500991
FlorentG
Posté le 09-01-2007 à 22:46:41  profilanswer
 

Leaky Abstraction, 2ème partie :D

n°1500992
FlorentG
Posté le 09-01-2007 à 22:47:44  profilanswer
 

Il ressemble à quoi, le code HTML généré ?

n°1501007
Roodie
Posté le 09-01-2007 à 23:14:53  profilanswer
 

Coucou :)
 
ça veut dire quoi "leaky abstraction" ?  
Sinon, le code généré pour le label ajouté est :  

Code :
  1. <span>myLabel</span>


Pourquoi tu veux savoir ça ?  :??:  
Merci bien en tout cas si tu peux m'aider :)

n°1501010
FlorentG
Posté le 09-01-2007 à 23:18:31  profilanswer
 

Nan mais le reste et tout. Parce que là tu insère le label si !postback, donc forcément quand tu cliques sur le bouton ça va postbacker, donc pas de label insérer.
 
Leaky Abstraction, parce que ASP.NET fait tout pour toi, et donc souvent des trucs simples à faire avec le langage en-dessous (HTML) peut tout à coup devenir compliqué ou pas clair parce que tu ne manipules pas directement l'HTML.
 
Un truc du style Button_Click est un non-sens total en terme de web : d'un point de vue du langage HTML ou du protocole HTTP, on ne clique jamais sur un bouton. En fait, on envoie une requête à une certaine URL avec quelques informations. Tu suis ? :D

n°1501034
Roodie
Posté le 10-01-2007 à 00:07:09  profilanswer
 

Le if (!IsPostBack) est fait exprès, parce que je ne veux à avoir à rajouter la Label à chaque fois.  
Je comprends bien pourquoi il s'en va à chaque reload, mais j'aimerais bien trouver un moyen pour qu'il persiste.  
EnableViewState=true ne change rien... je me demande si je ne dois pas utiliser un ViewState et y mettre le contenu du <div>, et à chaque reload je re-remplis le <div> avec le ViewState. C'est moche hein ?  
 
Je te donne le code HTML généré au premier chargement (le label est bien là)  

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head><title>
  4. Untitled Page
  5. </title></head>
  6. <body>
  7.   <form name="form1" method="post" action="test.aspx" id="form1">
  8. <div>
  9. <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTExMzQwOTM4NTJkZA==" />
  10. </div>
  11.     <div id="myDiv"><span>myLabel</span></div>
  12.     </div>
  13.     <input type="submit" name="myButton" value="Run" id="myButton" /> 
  14.   </form>
  15. </body>
  16. </html>

Mais je ne comprends tjs pas pourquoi tu as besoin de ce code :)
Merci bien en tout cas pour ton aide, et si tu trouves une solution...  :lol:

Message cité 1 fois
Message édité par Roodie le 10-01-2007 à 00:07:32
n°1501125
FlorentG
Posté le 10-01-2007 à 11:13:26  profilanswer
 

Roodie a écrit :

Le if (!IsPostBack) est fait exprès, parce que je ne veux à avoir à rajouter la Label à chaque fois.


Tu es obligé de le faire, sinon il s'affichera pas. Que la page soit appellée en get ou en post, il faut la regénérer entièrement

 
Roodie a écrit :

Mais je ne comprends tjs pas pourquoi tu as besoin de ce code :)


Parce que c'est le plus important : tout la tambouille d'asp.net sert à générer du code HTML sans trop se prendre la tête. Maintenant s'il génère n'importe quoi, c'est normal que ça marche pas :) Donc parfois le mieux est de voir ce qui sort


Message édité par FlorentG le 10-01-2007 à 11:13:39
n°1501244
Roodie
Posté le 10-01-2007 à 14:18:19  profilanswer
 

Snif, je ne peux pas faire ce que j'espérais alors :(
Bin si qqn a une idée :)
Merci bcp à toi en tout cas :)

n°1501557
Roodie
Posté le 10-01-2007 à 23:00:50  profilanswer
 

Coucou :)
 
Voici une solution à mon problème. Pas aussi bien que je ne l'espérais mais bon...

Code :
  1. // add label
  2. Label label = new Label();
  3. label.Text = "myLabel";
  4. myDiv.Controls.Add(label);
  5. // get myDiv content
  6. StringBuilder sb = new StringBuilder();
  7. HtmlTextWriter textWriter = new HtmlTextWriter(new StringWriter(sb));
  8. myDiv.RenderControl(textWriter);


Tu l'as compris, j'utilise "RenderControl()" pour récupérer le contenu de "myDiv", puis ensuite j'utiliserai le ViewState pour récharger le contenu à chaque fois...  
 
Merci encore bcp de ton aide :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C# .NET 2.0] Un contrôle ajouté disparaît qd on reload la page

 

Sujets relatifs
[php] ouvrir une page d'un site hebergé sur OVH[ASP.NET] Mélanger l'utilisation de ASPNETDB et une BDD classique
[C# .NET] Implementer une alarme pour agendaFormulaire qui crée une page
Envoyer message via une page HTML[javascript]Bouton en fonction de la page
preload pour swf sur page htmlProblème centrage et élargissement de page web
[C] Des accolades "just pour le fun" ?Asp.Net Erreur 302 "Object Moved Here"
Plus de sujets relatifs à : [C# .NET 2.0] Un contrôle ajouté disparaît qd on reload la page


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR