倒计时计时器倒计时只有1秒比停止在asp

dgtucam1  于 2023-05-02  发布在  .NET
关注(0)|答案(1)|浏览(157)

我需要做一个服务器端倒计时计时器只在秒:
这里是我的按钮,启动计时器:

public partial class _Default : Page
{
    int counter = 0;

    protected void Page_Load(object sender, EventArgs e)
    {}

    protected void Button2_Click(object sender, EventArgs e)
    {
        Timer1.Tick += Timer1_Tick;
        Timer1.Interval = 1000; // 1 second
        Timer1.Enabled = true;
        Label1.Text = counter.ToString();
    }
}

然后调用定时器控件:

protected void Timer1_Tick(object sender, EventArgs e)
{
    counter = 150;
            
    counter--;
            
    if (counter == 0)
    {
        Timer1.Enabled = false;
    }
    
    Label1.Text = counter.ToString();
}

这是我的标记:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Timer1" />
    </Triggers>
    <ContentTemplate>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" />
        <asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick"/>
    </ContentTemplate>
</asp:UpdatePanel>

问题是,当我点击按钮,它停止在第一秒倒计时
我还想问,如果我可以使用StopWatch类作为countDown计时器,因为它在秒计数时更准确,如果你能给予我一个例子。..

ctehm74n

ctehm74n1#

首先,您是如何以及为什么会出现一个名为_Default的页面的?
我已经浏览了20年的网页-从来没有见过一个页面以下划线开头。
为什么你要为更新面板定义一个触发器?你不需要,也不想要。所以,把那个拿掉。
所以,让我们创建一个新的页面。
我们称之为CountDownTest。aspx
好了,我们首先拖进一个脚本管理器(更新面板总是需要它们的)。
然后我们可以降低我们的加价。
让我们有一分钟,然后秒倒计时。然后是开始按钮和停止按钮。
让我们使用一个“时间跨度”,因为你也问。
到目前为止,我们有这个:
假设我们安装了bootstrap。
然后让我们格式化一下我们的盒子。
所以我们有这个标记:

<style>
        .mybox {border:4px solid;
               width:38px;
               height:36px;
               text-align:center;
               font-size:larger
        }
    </style>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>

        <asp:Timer ID="Timer1" runat="server" 
            Enabled="False" 
            Interval="1000" OnTick="Timer1_Tick">
        </asp:Timer>

        <div style="float:left;text-align:center">
            <font size="4">Minutes</font>
            <br />
            <asp:TextBox ID="txtMinutes" runat="server" Text="0"
                CssClass="mybox">
            </asp:TextBox>

            <br />
            <br />

            <asp:Button ID="cmdStart" runat="server"
                Text="Start"
                CssClass="btn btn-info" OnClick="cmdStart_Click" />
        </div>

        <div style="float:left;text-align:center;margin-left:25px">
            <font size="4">Seconds</font>
            <br />
            <asp:TextBox ID="txtSeconds" runat="server" Text="10"
                CssClass="mybox">
            </asp:TextBox>

            <br />
            <br />

            <asp:Button ID="cmdStop" runat="server"
                Text="Stop" Enabled="false"
                CssClass="btn btn-danger" OnClick="cmdStop_Click" />

        </div>
    </ContentTemplate>
</asp:UpdatePanel>

注意我们是如何将计时器控件设置为禁用的(在标记中是可以的)。
并注意如何停止按钮也禁用。
好了,我们后面的代码需要一个开始按钮事件、停止按钮事件和计时器滴答事件。
我们有这样的代码:

public partial class CountDownTest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void cmdStart_Click(object sender, EventArgs e)
    {
        cmdStart.Enabled = false; // disable the start button
        cmdStop.Enabled = true;   // enable the stop button

        TimeSpan MyTime = new TimeSpan(0, 
                        Convert.ToInt32(txtMinutes.Text), 
                        Convert.ToInt32(txtSeconds.Text));

        ViewState["MyTime"] = MyTime;
        Timer1.Enabled = true;   // start the clock!!!

    }

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        TimeSpan MyTime = (TimeSpan)ViewState["MyTime"];
        TimeSpan OneSec = new TimeSpan(0, 0, 1);

        MyTime = MyTime.Subtract(OneSec);
        ViewState["MyTime"] = MyTime;

        txtMinutes.Text = MyTime.Minutes.ToString();
        txtSeconds.Text = MyTime.Seconds.ToString();

        if (MyTime.TotalSeconds <= 0)
        {
            // no time left
            Timer1.Enabled = false;
            cmdStart.Enabled = true;
            cmdStop.Enabled = false;
        }

    }

    protected void cmdStop_Click(object sender, EventArgs e)
    {
        Timer1.Enabled = false;
        cmdStart.Enabled = true;    
        cmdStop.Enabled = false;    
    }
}

现在的效果是这样的:

相关问题