2017-02-04 2 views
0

Ich habe ein Problem mit einem Timer in einem UpdatePanel. Ich möchte einen Countdown (35 Minuten) einstellen und wenn ich eine Taste drücke, wird der Countdown gestartet, aber nichts geschieht, wenn ich darauf klicke. Es ist in einer Inhaltsseite, BTW.Wie verwende ich einen Timer in einer MasterPage mit UpdatePanel?

ASP-Code:

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
<div class="container"> 
<div style="position:fixed; border:dotted 2px; z-index:1"> 
<asp:UpdatePanel ID="upTiempo" UpdateMode="Conditional" runat="server" ViewStateMode="Enabled"> 
    <ContentTemplate> 
     <i class="fa fa-clock-o fa-3x"></i><asp:Label ID="lbMins" CssClass="h2" runat="server" Text="35" Font-Bold="True"></asp:Label><asp:Label ID="lbPts" runat="server" CssClass="h2" Font-Bold="true">:</asp:Label> 
     <asp:Label ID="lbSecs" CssClass="h2" runat="server" Text="00" Font-Bold="True"></asp:Label> 
     <asp:Button ID="btnEmpezar" runat="server" Text="Empezar" OnClick="btnEmpezar_Click"/> 
     <asp:Timer ID="tmTimer" runat="server" Interval="1000" OnTick="tmTimer_Tick"></asp:Timer> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="tmTimer" EventName="Tick" /> 
    </Triggers> 
</asp:UpdatePanel> 
</div> 

Und hier ist der C# -Code:

int mins = 35; 
int secs = 0; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    tmTimer.Enabled = false; 
} 

protected void tmTimer_Tick(object sender, EventArgs e) 
{ 
    if (secs < 0) 
    { 
     secs = 59; 
     mins--; 
    } 

    if (secs < 10) 
     lbSecs.Text = "0" + secs; 
    else 
     lbSecs.Text = "" + secs; 

    if (mins < 10) 
     lbMins.Text = "0" + mins; 
    else 
     lbMins.Text = "" + mins; 

    if (secs == 0 && mins == 0) 
    { 
     lbMins.Text = "00"; 
     lbSecs.Text = "00"; 

     tmTimer.Enabled = false; 
    } 

    secs--; 

    upTiempo.Update(); 
} 

protected void btnEmpezar_Click(object sender, EventArgs e) 
{ 
    tmTimer.Enabled = true; 
} 

Mache ich etwas falsch? Fehlt etwas? Soll ich mich umbringen?

Antwort

0

Selbstmord würde nicht viel helfen, oder?

Wie auch immer, Ihr Timer befindet sich im Update-Bereich. Wenn Sie upTiempo.Update(); aufrufen, wird das gesamte Panel neu geladen, einschließlich des Timers. Der Timer ist standardmäßig deaktiviert, deshalb passiert nichts, nachdem das erste Tick-Ereignis ausgelöst wurde.

es Set so zusammen:

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
<asp:Timer ID="tmTimer" runat="server" Interval="1000" OnTick="tmTimer_Tick"></asp:Timer> 
<div class="container"> 
<div style="position:fixed; border:dotted 2px; z-index:1"> 
<asp:UpdatePanel ID="upTiempo" UpdateMode="Conditional" runat="server" ViewStateMode="Enabled"> 
    <ContentTemplate> 
     <i class="fa fa-clock-o fa-3x"></i><asp:Label ID="lbMins" CssClass="h2" runat="server" Text="35" Font-Bold="True"></asp:Label><asp:Label ID="lbPts" runat="server" CssClass="h2" Font-Bold="true">:</asp:Label> 
     <asp:Label ID="lbSecs" CssClass="h2" runat="server" Text="00" Font-Bold="True"></asp:Label> 
     <asp:Button ID="btnEmpezar" runat="server" Text="Empezar" OnClick="btnEmpezar_Click"/> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="tmTimer" EventName="Tick" /> 
    </Triggers> 
</asp:UpdatePanel> 
</div> 

Auf diese Weise, wenn die Platte neu geladen wird, wird der Timer bleibt unangetastet und hält wie erwartet läuft.

hoffte, das hilft

+0

Nun ja ... Es IDID nicht funktionieren ... Ich habe einen Breakpoint hinzugefügt und wenn die Seite geladen wird, schickt es mich auf die Master-Seite C# -Code ... – OPMUANRK

+0

Danke für die Hilfe, übrigens – OPMUANRK

+0

Okay, ich konnte zugrunde liegende Probleme nicht identifizieren;) aber immer noch, halten Sie Ihre Timer außerhalb Ihrer Update-Panels – DerpyNerd

0

Nun, ich denke, dass ich eine Lösung gefunden ... ich gespeichert nur die Minuten und Sekunden Werte in ein Session-Variable, so ...

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     Session["mins"] = mins; 
     Session["secs"] = secs; 

     tmTimer.Enabled = true; 
    } 
} 

protected void tmTimer_Tick(object sender, EventArgs e) 
{ 
    mins = int.Parse(Session["mins"].ToString()); 
    secs = int.Parse(Session["secs"].ToString()); 

    if (secs < 0) 
    { 
     secs = 59; 
     mins--; 
    } 

    if (secs < 10) 
     lbSecs.Text = "0" + secs; 
    else 
     lbSecs.Text = "" + secs; 

    if (mins < 10) 
     lbMins.Text = "0" + mins; 
    else 
     lbMins.Text = "" + mins; 

    if (secs == 0 && mins == 0) 
    { 
     lbMins.Text = "00"; 
     lbSecs.Text = "00"; 

     tmTimer.Enabled = false; 
    } 

    secs--; 

    upTiempo.Update(); 

    Session["mins"] = mins; 
    Session["secs"] = secs; 
} 
Verwandte Themen