Masquer div si postback

Résolu
jostag Messages postés 14 Date d'inscription mardi 17 février 2009 Statut Membre Dernière intervention 22 avril 2009 - 13 mars 2009 à 17:34
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 - 18 mars 2009 à 17:10
Bonjour a tous,

voila sur une de mes pages asp.net (c#) il y a quelque div que je cache grâce a des radioboutons,
j'ai aussi un gridview avec sélection (génère un postback).

Ce que je voudrais c'est que lorsque la page éxécute un postback que se sois le div du dernier bouton radio sélectionner.

En fait j'ai déjà une partie de code toutefois elle ne marche pas , j'ai toujours lors du postback le div que je ne cachais pas au début :

if(Page.IsPostBack)
        {
            string idRbtn = "";
            string divAfficher = "";            if (rbtnIU.Checked true) { idRbtn rbtnIU.ID; divAfficher = "divU"; }            else if (rbtnA.Checked true) { idRbtn rbtnA.ID; divAfficher = "divA"; }            else if (rbtnR.Checked true) { idRbtn rbtnR.ID; divAfficher = "divR"; }            else if (rbtnL.Checked true) { idRbtn rbtnL.ID; divAfficher = "divL"; }            else if (rbtnG.Checked true) { idRbtn rbtnG.ID; divAfficher = "divG"; }

            String sb = "";
            sb += ("function affichageDiv() {");            sb +("document.getElementById('divA').style.display 'none';");            sb +("document.getElementById('divUr').style.display 'none';");            sb +("document.getElementById('divR').style.display 'none';");            sb +("document.getElementById('divG').style.display 'none';");            sb +("document.getElementById('divLs').style.display 'none';");            sb +("document.getElementById('" + idRbtn + "').checked 'checked';");            sb +("document.getElementById('" + divAfficher + "').style.display 'block'; }");

            this.Page.ClientScript.RegisterStartupScript(Page.GetType(), "affichageDiv", sb, true);
        }

J'ai vérifié plusieurs fois c'est les bon id de div etc.

-----------------------------------------------------------------------------------------------
Jo

6 réponses

Hello,

Au lieu d'injecter du Javascript pour afficher ou cacher tes div, je te conseil d'utiliser le contrôle "Panel" d'ASP.net qui est fait pour ca.

Après dans le code-behind pour afficher ou masquer ton panel (div), tu utilises simplement TonPanel.Visible = False;

A++
3
jostag Messages postés 14 Date d'inscription mardi 17 février 2009 Statut Membre Dernière intervention 22 avril 2009
13 mars 2009 à 20:39
J'y pense si quelqu'un connais une solution avec le javascript et les div j'aimerais aussi la connaitre puisque je commence à l'apprendre (le javascript) et j'apprécirais beaucoup

Merci encore fabienfs sa marche comme je voulais
3
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
18 mars 2009 à 01:06
Bonsoir,

Si tu continues à faire un postback, la solution de fabienfs reste bien entendu la meilleure, et t'évitera le problème de la persistance de l'état de ta page, qui se posera en js dès que tu feras un postback.
(Pour ce que tu voulais faire au début,  tu pouvais simplement appeler ta fonction js lors du load, en mettant runat=server sur ton body en lui donnant un id (ici, "bd"), et écrire en plus :
bd.Attributes.Add("onload","affichageDiv()"); (mais c'est juste pour le signaler...))
Sinon, si tu n'as pas besoin de postback, tu peux tout faire en js. Il suffit de mettre un test sur tes radiobuttons (tu peux ajouter l'appel sur le onload de ta page, en c# avec attributes.add ;, en le mettant sur l'événement onclick de tes radiobuttons, et en supprimant l'autopostback). Tu peux écrire directement ta fonction js dans ta page ou dans un fichier appelé, et masquer les div selon ton besoin.
Dans ce cas (mais comme dans l'autre, puisque c'est du javascript), n'oublie pas que les modifications client ne seront pas reportées directement côté serveur : d'où le grand intérêt du panel, car dès que tu auras un postback, les div cachées réapparaîtront.
Cela dit, si tu veux éviter un retour serveur lorsque tu veux seulement masquer une div, tu peux signaler en js quelles div doivent être masquées (ou affichées) dans un hiddenfield asp, que tu pourras traiter lors du postback dans ton code c#.
En bref, cela dépend pas mal de ce que tu fais : si tu dois faire un postback systématique, le panel est le mieux (mais pour la fluidité, éventuellement, regarde alors du côté de l'ajax). Sinon, si tu veux seulement cacher tes div, le js sera très bien.

GGtry
3
jostag Messages postés 14 Date d'inscription mardi 17 février 2009 Statut Membre Dernière intervention 22 avril 2009
18 mars 2009 à 15:55
Merci GGtry !!

en fais le seul problème que me pose le postback c'est que j'ai certaine information que ne s'affiche pas comme il faut puisque j'ai du modifié mon affichage pour la n ième fois.

sinon je vais regarder ce que tu m'as dis plus tard (et ajax je connais pas)
3

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

Posez votre question
ggtry Messages postés 417 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 21 juillet 2010 1
18 mars 2009 à 17:10
Salut,


Une précision : pour le hiddenfield, j'ai dit n'importe quoi : en fait, puisque tu as des radiobuttons, il suffit de récupérer les valeurs de ceux-ci lors du postback. Tu peux d'ailleurs faire des panel côté asp : ceux-ci sont rendus en html par un div. De cette façon, tu peux les masquer comme des div en pur javascript, et en cas de postback tu récupères le radiobutton coché et tu masques ce qui doit l'être (dans ce cas, avec la propriété style et display, parce que visible false ne te permettrait plus de récupérer les panels en js).

GGtry
3
jostag Messages postés 14 Date d'inscription mardi 17 février 2009 Statut Membre Dernière intervention 22 avril 2009
13 mars 2009 à 20:22
Merci,

c'est sur que sa ne fait pas le même effet (j'aime bien l'espèce d'effet déroulant des div quand on les affiches ou masque) mais bon c'est pas pour l'effet que je fais le projet alors je crois que je vais prendre ta solution.
0
Rejoignez-nous