Asp.net 按钮幕布遮盖效果实现方式
Asp.net button按钮点击后想要实现幕布效果来等待服务器端执行完成,这种需求虽说看起来很简单,但真实做起来并不是那么简单,涉及了很多细节点,而对于深入理解asp.net button生命周期的人来说自然不用多费周折。本人在完成此功能的时候想到了很多办法,下面将我解决此问题的过程一一分享。申明一下,做这种需求时项目已经接近尾声,因为是基于SharePoint 2007的项目(坑爹之处也在此了),而且整个项目并没有涉及到WCF或者Web Service的服务或者是handle,我更不可能为了这一点功能直接去更改项目的结构,通过javascript去用ajax来实现。所以蛋疼的一幕幕出来了。
1. 我尝试过用在button_click时间中注册javascript.尝试失败
在前端asp页面中我定义了一个幕布层div,并且写了一个控制这个幕布层显示和消失的javascript函数, 想着当执行button_click事件时,我用
Page.ClientScript.RegisterStartupScript(Page.GetType(), (new Guid()).ToString(), script)方式调用前台幕布控制的javascript,也就是在Click事件最开始时调用幕布显示的javascript,在Click事件结束后调用幕布消失的javascript,看起来都合情合理,其实不然。
这样做,当点击asp.net button按钮时总是会出现幕布效果,并且幕布不会消失除非刷新页面。我查看了浏览器加载完成后的source文件,在form结束标签之前,只有第一次注册的javascript,也就是通过asp.net button向页面注册javascript只会注册一次,所以用这种方法想再click事件中执行两次javascript是不可行的。
2. 我也尝试过换另外一种思路解决,也就是当用户点击按钮后,按钮不可用,直到服务器执行完毕,按钮再次可用,通过这种方式来等待服务器执行后台代码,防止在服务器执行过程中用户多次点击按钮造成多次提交数据。
想实现上述,我又尝试了两种方式,
一种是在Click 事件中指定button.Enable=false,在执行完所有的操作后执行button.Enable=true,这种方式也不行,因为button的click事件已经执行了,再对这个button设置Enable是无效的。
第二种方式是通过javascript控制。
在button中绑定一个ClientClick事件,指向javascript 函数,这个函数用来控制asp.net button的Enable,控制的方法如下:
下面是设置asp.net button不可用
var btn = document.getElementById("btn");
btn.setAttribute("disabled", "disabled");
设置button可用:
btn.removeAttribute("disabled");
这种方式也不可行,当设置了button不可用时,button的服务器端click事件就不会执行了。
但是按照这种思路,我们还是可以找到最后解决方法的。
3. 最后可实现的解决方案
首先我在aspx页面中定义了一个幕布div,如下:
#shade
{
width: 400px;
height: 300px;
background-color: Gray;
z-index: 999;
left: 0px;
top: 0px;
position: absolute;
-moz-opacity: 0.9; /*Firefox*/
opacity: 0.9; /*Opera*/
filter: alpha(opacity=90); /*IE*/
display: none;
}
<div id="shade"> </div>
当然你也可以在shade中添加一些类似于正在加载的图片。
再创建一个javascript函数
function shade() {
var sha = document.getElementById("shade");
sha.style.display = "block";
}
好了再定义asp.net button
<asp:Button ID="btn" runat="server" Text="Button" OnClientClick=" shade()" />
Button的Click事件注册在后台,Click事件里面的也方法不用做任何更改。
这种方式最后的实现效果是,当用户点击button就会出现幕布遮盖效果,等待服务器端执行完毕,在这期间用户不能做任何操作,比如再次点击,当服务器端执行完成,幕布就会消失。
这里并没有写任何javascript来使幕布遮盖消失,为什么当服务器执行完毕后幕布遮盖会消失呢?
原因是因为button的click 事件执行完毕后页面会回发,重新加载页面会使得#shade的display:none。
简单的效果实例图(只作简单的效果演示):
Asp.net 按钮幕布遮盖效果实现方式的更多相关文章
- asp.net core 中灵活的配置方式
asp.net core支持外部文件和命令行参数方式来配置系统运行所需要的配置信息,我们从下面两个常用场景来具体说下具体使用方法. 一.监听地址及端口配置 1,命令行方式 asp.net core系统 ...
- ASP.net 中手工调用WS(POST方式)
ASP.net 中手工调用WS(POST方式)核心代码:string strUrl="http://localhost:21695/service1.asmx/getmythmod" ...
- asp.net开发中常见公共捕获异常方式总结(附源码)
本文实例总结了asp.net开发中常见公共捕获异常方式.分享给大家供大家参考,具体如下: 前言:在实际开发过程中,对于一个应用系统来说,应该有自己的一套成熟的异常处理框架,这样当异常发生时,也能得到统 ...
- android 按钮点击效果实现
在其他人的博客里看到其实实现按钮点击效果的方法有很多,这里提到的只是其中一个办法 图片素材(我自己用截图截的,可以自己搞) 放到mipmap目录下(studio是在这个目录下 , eclipse 直接 ...
- VM虚拟机快照还原效果实现方式
===================================================默认"快照删除"行为:============================ ...
- Asp.Net中的三种分页方式
Asp.Net中的三种分页方式 通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等. 第一种:使用Grid ...
- ASP.NET通过http/https的POST方式,发送和接受XML文件内容
本文转载:http://hi.baidu.com/ysyhyt/item/5011ae39ce3cf49fb80c0395 本文参考:http://blog.csdn.net/ououou123456 ...
- android带有文字的图片按钮的两种实现方式
android带有文字的图片按钮的两种实现方式 1). TextView对Button用相对布局,这要要求按钮的背景图片要留下空白位置给文字.这种方式开发比较简单,适合做一些风格一致的Button. ...
- Flutter实战视频-移动电商-60.购物车_全选按钮的交互效果制作
60.购物车_全选按钮的交互效果制作 主要做全选和复选框的这两个功能 provide/cart.dart 业务逻辑写到provide里面 先持久化取出来字符串,把字符串编程list.循环list ca ...
随机推荐
- Linux服务器在SSH客户端如何实现免密登录
一.SSH客户端Setting 配置 key , 创建生成公钥导出文件. 二.服务器 master 上生成密钥 通过执行命令 ssh-keygen -t rsa 来生成我们需要的密钥. ssh-ke ...
- Spring Boot 对请求的映射
在SpringBoot中对请求资源的映射有三种方式: 1.通过编写一个Controller请求,获得客户端发送过来的请求就转发出去 //通过这种方式可以来映射页面请求路径 @PostMapping(& ...
- python GUI图形化编程-----wxpython
一.python gui(图形化)模块介绍: Tkinter :是python最简单的图形化模块,总共只有14种组建 Pyqt :是python最复杂也是使用最广泛的图形化 Wx ...
- Random-Forest-Python
1. 近期目标,实现随机森林进行点云分类 1)学习阶段: [干货]Kaggle 数据挖掘比赛经验分享 Kaggle Machine Learning Competition: Predicting T ...
- 使用纳米 Protocol buffers 作为序列化数据
使用纳米 Protocol buffers 作为序列化数据 Protocol Buffers 是 Google 公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化. 但是它更小, 更快, ...
- Java 基础 多线程和线程池基础
一,多线程 1.1 多线程介绍 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是进程中的一个执行单元,负 ...
- 再次聊一聊promise settimeout asycn awiat执行顺序---js执行机制 EVENT LOOP
首先js是单线程 分为同步和异步,异步又分为(macrotask 宏任务 和 microtask微任务 ), 这图还是很清晰嘛,再来一张 总结一下,就是遇到同步先执行同步,异步的丢到一边依次排队,先排 ...
- 解决页面使用ifrmae后,在session失效后登录页面在子页面中显示(子窗体出现父窗体)
在登录页面中添加js判断当前页面是否是父页面,诺不是则父页面跳转至登录页面. <script type="text/javascript"> //解决登录后多个父窗体问 ...
- C# 方法扩展
using System.Collections.Generic; namespace Extra_Function { public static class Function { public s ...
- C# 数组在内存中的存储
C# 数组是引用类型,那么在内存中是如何存储的呢? 在VS中调试C#程序,如何查看内存.寄存器.反汇编 在这篇文章里看到了如何在VS 中查看内存 先断点打在数组创建后语句那里,点debug->W ...