2010-11-11 6 views
0

J'ai une variable appelée "Totaltime" dans mon programme. J'affecte la variable (en secondes) comme Totaltime = 3600. Maintenant je veux réduire le temps de 1 sec pour chaque événement de tic et montrer le temps réducteur dans le contrôle d'étiquette ou de litera. Peut n'importe qui dites le codage de C# ASP.NET pour implémenter ce?Comment réduire seconde par seconde la durée totale de C# asp.net?

+5

Javascript, pas une technologie côté serveur. – leppie

+1

'Totaltime -;' ou quelle est votre question? –

+0

http://refactormycode.com/codes/302-countdown-timer-minutes-seconds-javascript#refactor_74241 –

Répondre

0

Cela n'est pas possible dans le code côté serveur (ASP.Net/C#). Vous avez besoin d'un code côté client (javascript) pour ce faire

1

Même en dépit du fait que cette tâche ne peut pas être fait uniquement avec le code côté serveur, vous pouvez le faire utilisera le client suivant et le code serveur:

Dans votre fichier .aspx, mettez le javascript suivant dans la tête < > partie de la page:

<script type="text/javascript"> 
    var timer = 3600, timeCont, t, timerOn = 0, timePanel 
function countTimer() { 
    timeCont.value = timer; 
    timePanel.innerHTML = hms(timer); 
    timer--; 
    t = setTimeout("countTimer()", 1000); 
} 
function playTimer(obj) { 
    if (timeCont == null || timeCont == "undefined") timeCont = document.getElementById("timerval"); 
    if (timePanel == null || timePanel == "undefined") timePanel = document.getElementById("timepanel"); 
    if (!timerOn) { 
     timerOn = 1; 
     countTimer(); 
     obj.value = timerLabel[1]; 
    } else { 
     timerOn = 0; 
     clearTimeout(t); 
     obj.value = timerLabel[0]; 
    } 
} 
function hms(secs) { 
    time = [0, 0, secs]; 
    for (var i = 2; i > 0; i--) { 
     time[i - 1] = Math.floor(time[i]/60); 
     time[i] = time[i] % 60; 
     if (time[i] < 10) time[i] = '0' + time[i]; 
    }; 
    return time.join(':'); 
} 
function autoStartTimer() { 
    playTimer(this); 
} 
window.onload = autoStartTimer; 
</script> 

Ensuite, mettre les contrôles HTML suivants dans le corps < > de votre pa ge:

<asp:Literal ID="litTimerLabels" runat="server"></asp:Literal> 
<input type="hidden" name="timerval" id="timerval" value=""/> 
<div id="timepanel" style="font-weight:bold;font-size:16px;float:left;padding:2px 20px 0 0;"></div> 
<asp:Button ID="btnDoStuff" runat="server" Text="Get number of remaining seconds on server side" OnClick="btnDoStuff_Click" /> 


La dernière étape serait d'ajouter des fonctions dans les .aspx.cs de votre page pour gérer le temps restant sur backend:

// Get elapsed time in seconds after postback has occured 
protected void btnDoStuff_Click(object sender, EventArgs e) 
{ 
    int secondsLeft = GetSecondsLeft(); 
}  

private int GetSecondsLeft() 
{ 
    int formSecondsLeft = 0; 
    if (Request.Form["timerval"] != null && 
     int.TryParse(Request.Form["timerval"], out formSecondsLeft)) 
    { 
     // Keep in mind, that this can be a negative number if more than 3600 seconds elapsed! 
     return formSecondsLeft; 
    } 
    else 
    { 
     return 0; 
    } 
} 

Cela devrait être tout ce dont vous avez besoin. Amusez-vous à coder!

+0

+1 Pour le faire côté client – Kimtho6

0

Vous pouvez ajouter un UpdatePanel comme ceci:

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
     <asp:Timer runat="server" id="UpdateTimer" interval="5000" ontick="UpdateTimer_Tick" /> 
     <asp:UpdatePanel runat="server" id="TimedPanel" updatemode="Conditional"> 
      <Triggers> 
       <asp:AsyncPostBackTrigger controlid="UpdateTimer" eventname="Tick" /> 
      </Triggers> 
      <ContentTemplate> 
       <asp:Label runat="server" id="DateStampLabel" /> 
      </ContentTemplate> 
     </asp:UpdatePanel> 

et codebehind

protected void UpdateTimer_Tick(object sender, EventArgs e) 
{ 
    DateStampLabel.Text = DateTime.Now.ToString(); 
} 
+0

Bon point Kim, mais cela fera un aller-retour partiel pour chaque intervalle donc dans ce cas chaque seconde qui peut être ou ne pas être un problème. Ma solution n'est peut-être pas aussi bonne que la vôtre, mais elle fait le travail et elle diminue le compteur du côté client sans faire d'allers-retours inutiles. – Skorpioh

+0

Vous venez de souligner qu'il est possible de le faire côté serveur – Kimtho6

Questions connexes