news 2026/6/10 3:31:42

在WebForm中实现发送验证码,点击按钮后按钮禁用60秒的效果

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在WebForm中实现发送验证码,点击按钮后按钮禁用60秒的效果

在实现代码之前,先思考一个问题:

同样点击一个按钮调用后台,WebForm与小程序有什么区别?

WebForm 是重量级的,服务器控件的Button,执行时会将整个页面提交到后台,执行完成之后,服务器会将整个页面再重新加载一次。

为什么我们看到重新加载的页面,控件的值没有变化?那只是因为在整个页面提交时,保存了控件的值,重新加载时,重新渲染出来了而已。

相当于:我们做菜,想买瓶酱油,出门时把锅碗瓢盆都带在身上,买完酱油,锅碗瓢盆重新放回原位。

所以:

第一,这个消耗是比较大的;

第二,点击按钮之后的页面,其实已经不是我们前面的页面,是重新加载出来的页面。

说完WebForm, 那小程序呢?

小程序其实相当于WebForm用 Ajax 方式来实现功能,没有“服务器控件”的概念,所以非常轻量,原理完全不同。

回到原来的需求上来:

在WebForm中实现发送验证码,点击按钮后按钮禁用60秒的效果

应该怎么做呢?

两种方式:

1、采用Ajax 方式实现,这个思路比较简单,但写代码要麻烦一点,需要写ajax 相关的代码。

2、采用WebForm原生的服务器控件来实现。

我们想实现的,是第2种方式。

第2种方式,禁用按钮60秒的效果应该在哪个阶段来实现呢?

如果采用类似 OnClientClick 的方式,来实现,则必须前端执行完,才可以执行后端。而且即使能实现,效果也不好。

如果60秒走完才执行后端,白白浪费了时间。

如果60秒没走完就执行了后端,60秒效果没有达到。

所以,必须换思路,在后端执行完之后再来执行60秒效果就可以了。

因为按钮点击完,页面会重新加载一次,我们在前端利用这个机会把60秒的效果展现出来就可以了。

思路清晰,要做就容易了:

.aspx 代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestSmsCode.aspx.cs" Inherits="SWSchool.Mobile.TestSmsCode" %> <!DOCTYPE html> <html xmlns="<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script src="../JS/jquery-1.8.3.min.js"></script> <script type="text/javascript"> $(document).ready(function () { var seconds = parseInt($('#<%= hfSeconds.ClientID %>').val()); if (seconds > 0) { startCountdown(seconds); } function startCountdown(seconds) { var btnSendSms = $('#<%= btnSendSms.ClientID %>'); btnSendSms.prop('disabled', true); var interval = setInterval(function () { if (seconds > 0) { btnSendSms.val('重新发送(' + seconds + 's)'); seconds--; } else { clearInterval(interval); btnSendSms.prop('disabled', false); btnSendSms.val('发送验证码'); $('#<%= hfSeconds.ClientID %>').val('0'); } }, 1000); } }); </script> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="txtMobile" runat="server" Width="200px" MaxLength="11" placeholder="请输入手机号"></asp:TextBox> <asp:Button ID="btnSendSms" runat="server" Text="发送验证码" OnClick="btnSendSms_Click" /> <asp:HiddenField ID="hfSeconds" runat="server" Value="0" /> <br /><br /> <asp:TextBox ID="txtSmsCode" runat="server" Width="200px" MaxLength="6" placeholder="请输入验证码"></asp:TextBox> <asp:Button ID="btnVerifySms" runat="server" Text="验证验证码" OnClick="btnVerifySms_Click" /> <br /><br /> <asp:Label ID="lblMessage" runat="server" ForeColor="Red"></asp:Label> </div> </form> </body> </html>

.aspx.cs 代码:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace SWSchool.Mobile { public partial class TestSmsCode : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnSendSms_Click(object sender, EventArgs e) { //todo : implement SMS sending logic here this.hfSeconds.Value = "60"; Response.Write("<script>alert('SMS sent successfully!');</script>"); } protected void btnVerifySms_Click(object sender, EventArgs e) { } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 16:34:48

Miniconda-Python3.10镜像配合GitHub Actions实现CI/CD流水线

Miniconda-Python3.10镜像配合GitHub Actions实现CI/CD流水线 在数据科学与AI开发的日常中&#xff0c;你是否曾遇到这样的场景&#xff1a;本地训练模型一切正常&#xff0c;推送到仓库后CI却报错“找不到模块”&#xff1f;或者团队成员反复追问“你的环境是怎么装的&#xf…

作者头像 李华
网站建设 2026/6/6 22:31:25

Miniconda-Python3.10镜像中安装OpenCV进行图像处理

在 Miniconda-Python3.10 镜像中高效部署 OpenCV 实现图像处理 在当今计算机视觉技术迅猛发展的背景下&#xff0c;图像处理早已不再是实验室里的小众研究方向&#xff0c;而是深入到了自动驾驶、工业质检、医疗影像分析乃至消费级智能设备的方方面面。越来越多的开发者和研究…

作者头像 李华
网站建设 2026/6/6 23:45:55

arm版win10下载更新机制:初始设置完整示例

ARM版Win10下载更新机制&#xff1a;从零开始的完整实战解析 你有没有遇到过这样的情况&#xff1f;一台全新的ARM架构Windows设备&#xff0c;第一次开机后卡在“正在准备你的设备”界面&#xff0c;进度条缓慢爬行&#xff0c;Wi-Fi图标疯狂闪烁——背后正是 arm版win10下载…

作者头像 李华
网站建设 2026/6/6 23:46:26

Miniconda-Python3.10镜像中安装ONNX Runtime进行模型推理

在 Miniconda-Python3.10 环境中使用 ONNX Runtime 实现高效模型推理 如今&#xff0c;AI 模型早已走出实验室&#xff0c;广泛应用于工业质检、医疗影像分析、智能客服等实际场景。但一个训练好的模型要真正“跑起来”&#xff0c;却远非调用几行代码那么简单——环境依赖冲突…

作者头像 李华
网站建设 2026/5/30 1:46:53

Miniconda-Python3.10镜像结合FastAPI构建高性能API接口

Miniconda-Python3.10 镜像结合 FastAPI 构建高性能 API 接口 在人工智能与数据科学项目日益复杂的今天&#xff0c;一个常见的痛点浮出水面&#xff1a;为什么同样的代码&#xff0c;在开发机上运行良好&#xff0c;部署到服务器却频频报错&#xff1f; 答案往往藏在“环境不一…

作者头像 李华
网站建设 2026/5/30 15:29:37

CMSIS入门必看:ARM Cortex微控制器软件接口标准详解

CMSIS实战指南&#xff1a;为什么每个Cortex-M开发者都该懂这套标准你有没有遇到过这样的场景&#xff1f;刚在STM32上写完一套串口通信代码&#xff0c;领导一句话“这个项目要迁移到NXP的KL27”&#xff0c;瞬间让你陷入重写外设配置、反复查手册、调试中断向量表的噩梦。更糟…

作者头像 李华