news 2026/8/29 5:05:08

在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/8/28 22:35:39

Miniconda-Python3.10镜像结合Vault管理敏感凭证

Miniconda-Python3.10镜像结合Vault管理敏感凭证 在当今AI与数据科学项目快速迭代的背景下&#xff0c;一个常见的痛点浮出水面&#xff1a;为什么代码在开发者本地运行良好&#xff0c;一旦部署到服务器或分享给同事就频频报错&#xff1f;更令人担忧的是&#xff0c;那些写在…

作者头像 李华
网站建设 2026/8/28 22:36:00

Miniconda-Python3.10镜像用于构建可复用的大模型训练模板

Miniconda-Python3.10镜像用于构建可复用的大模型训练模板 在大模型研发日益成为主流的今天&#xff0c;一个令人头疼却无法回避的问题反复出现&#xff1a;为什么同样的代码&#xff0c;在我的机器上能跑通&#xff0c;换到同事或服务器上就报错&#xff1f;更糟糕的是&#x…

作者头像 李华
网站建设 2026/8/28 22:36:25

could not find driver故障排查:从零实现完整示例

深入排查“could not find driver”错误&#xff1a;从原理到实战的完整指南你有没有遇到过这样的场景&#xff1f;本地开发一切正常&#xff0c;一部署到服务器或容器环境&#xff0c;程序刚启动就抛出一条刺眼的错误&#xff1a;PDOException: could not find driver没有堆栈…

作者头像 李华
网站建设 2026/8/28 22:36:25

Miniconda-Python3.10镜像结合Supervisor实现进程守护

Miniconda-Python3.10镜像结合Supervisor实现进程守护 在现代AI服务与自动化系统的部署实践中&#xff0c;一个看似简单却频繁引发故障的场景是&#xff1a;某次模型推理接口突然无响应&#xff0c;日志显示Python脚本因内存溢出崩溃后未重启&#xff1b;与此同时&#xff0c;团…

作者头像 李华
网站建设 2026/8/28 22:35:52

Miniconda-Python3.10镜像中Jupyter Lab的高级使用技巧

Miniconda-Python3.10镜像中Jupyter Lab的高级使用技巧 在数据科学和人工智能项目日益复杂的今天&#xff0c;一个稳定、可复现且高效的开发环境已成为团队协作与个人研究的核心基础。你是否曾遇到这样的场景&#xff1a;本地跑通的模型在同事机器上因包版本冲突而报错&#xf…

作者头像 李华
网站建设 2026/8/25 21:32:02

hid单片机入门项目:制作简易键盘实战案例

从零开始造键盘&#xff1a;用HID单片机实现一个能插电脑的“硬核玩具”你有没有想过&#xff0c;手边那个普普通通的机械键盘&#xff0c;其实自己也能做出来&#xff1f;不是拆开换轴、改灯效那种“改装”&#xff0c;而是从一块裸片开始&#xff0c;亲手写代码、接电路&…

作者头像 李华