Probleme de PostBack général avec un UpdatePanel d'AjaxToolKit et un timer
Bonjour a tous,
Je suis développeur dans une toute petite entreprise éditrice de logiciel :
2 patrons, un qui développe, et l'autre qui commerce.
1 formatrice
et moi :D
et nous travaillons en Asp.net WebForm.
Je ne suis pas débutant en développement, seulement en client léger
Nous utilisons AjaxToolKit
Dans toutes nos solutions, nous avons une MasterPage qui contient différents ContentPlaceHolder
Un entete (asp:Table) qui contient un update panel qui joue le role de l'horloge ...
Code:
1 2 3 4 5 6 7 8 9
| <asp:UpdatePanel ID="test" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">
<ContentTemplate>
<asp:Timer ID="Horloge" runat="server" Interval="10000" />
<asp:Label ID="EtiHeure" runat="server" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="HorlogeVirtuelle" EventName="Tick" />
</Triggers>
</asp:UpdatePanel> |
dans le code behind, l'evenement Tick de "Horloge"met a jour "EtiHeure"
Le problème c'est qu'a chaque évènement tick, le postback est effectué sur toute la page.
Ce qui est contenu dans les autres ContentPlaceHolder
Par exemple, qd j'affiche un popup (avec un ModalPopupExtender), si j'attend les 10 secondes, il disparaît ....
J'ai evidemment regardé sur Développez.com, puis sur differents forums.
J'ai a peu près essayé toutes les solutions qui etaient proposées :
en ajoutant le timer dans un autre UpdatePanel,
en changeant le trigger,
en changeant UpdateMode de Always à Conditional, etc...
Mon patron y tient comme un fou a son horloge, et c'est pas un expert en Asp.Net
Rien n'y fait ...
Toujours le postback
J'ai lu l'exellent tuto sur l'UpdatePanel : http://www.asp.net/Ajax/Documentatio...lOverview.aspx
Un petits coup de main ?
Merci d'avance
Resolution du pb avec JavaScript
Re bonjour tout le monde,
J'ai trouvé un article qui resout le pb via JavaScript
http://www.supportduweb.com/scripts_...emps-reel.html
Attention, la methode javascript devient :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
<script type="text/javascript">
function date_heure(idctrl) {
date = new Date;
//annee = date.getFullYear();
//moi = date.getMonth();
//mois = new Array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
//j = date.getDate();
//jour = date.getDay();
//if (jour == 1)
//{
// jour = "1er";
//}
//jours = new Array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
h = date.getHours();
if (h < 10) {
h = "0" + h;
}
m = date.getMinutes();
if (m < 10) {
m = "0" + m;
}
s = date.getSeconds();
if (s < 10) {
s = "0" + s;
}
//resultat = jours[jour] + ' ' + j + ' ' + mois[moi] + ' ' + annee + ' ' + h + ':' + m;
resultat = '' + h + ':' + m + ':' + s;
var lbl = document.getElementById(idctrl);
if (lbl == null) {
return false;
}
lbl.innerHTML = resultat;
setTimeout('date_heure("' + idctrl + '");', '1000');
return true;
}
</script> |
Mettre dans le Body de la master page :
Code:
<body style="background-color: #124545;" onload="date_heure('<%= this.EtiHeure.ClientID%>');">
Et tout va tres bien ;)