注册 登录
编程论坛 ASP.NET技术论坛

[原创]利用继承制作防止重复提交按钮

铲铲 发布于 2006-09-02 16:47, 5349 次点击
我们浏览很多论坛发表帖子时,单击“发表”按钮,这个按钮就会变成灰色,并且还有提示如“正在提交,请稍候...”等,这样做一方面让用户看到效果,避免长时间等待网页的烦躁,另一方面又防止了重复提交。

在.NET中没有类似的功能,不过我们已经知道他就是一个普通按钮的基础上多加了一个功能而以。在.NET中,我们可以巧妙利用类的继承来制作这种按钮。
这里我是用C#语言作为范例,其他语言可以举一反三得到应用,这里不再赘述。

我们需要自己写一个类,这个类继承自System.Web.UI.WebControl.Button:
public class ClickOnceButton : System.Web.UI.WebControl.Button

我们知道要实现这种功能需要借助JS脚本,.NET的控件提供了一个Attributes属性用来添加任何想要的客户端属性。我们需要在客户端的onclick中写入:this.disabled=true,来达到使按钮变灰,另外,再用一句:this.value="正在提交,请稍候...",来使的按钮的文字改变。
把插入脚本这一动作放在了控件加载的时候进行。因此,我们重写OnLoad方法:
protected override void OnLoad(EventArgs e)
{
this.Attributes.Add("onclick","this.disabled=true;this.value=\"正在提交,请稍候...\"");
base.OnLoad (e);
}

上面这句向客户端属性中onclick添加了这些语句。记得重写函数是不要忘记最后要调用基类的OnLoad方法。

编译,然后就可以在网页上使用了。

你可以作为一个单独的控件库项目来写这个东西,然后从工具箱上添加上,把他们拖动到网页中,就可使用了。大家还可以扩充一些实用的功能。具体控件的编程美化等等细节此处不再赘述。

希望大家能够从中受益。

[此贴子已经被作者于2006-9-3 22:32:26编辑过]

12 回复
#2
caiyakang2006-09-02 18:06
不错~~顶一下~
#3
mylover6242006-09-02 18:25
好东西啊.^_^.
#4
IPV62007-04-15 15:23
写的太好了
#5
By17822007-08-21 23:46
小弟不明白怎么做啊
看了半天还是不懂
哪位高手解释一下呀

不胜感激
#6
川流不息2007-08-22 12:38

属于自定义控件,你需要自建一个类,然后按楼主所说,继承那个button类,然后把他写的东西放进去。
这就相当于你自建了一个按钮控件。然后,把这个拖到页面上就可以用了。

#7
川流不息2007-08-22 12:39
需要编译产生dll,然后在工具椄上去添加它。
#8
冰彩虹2007-08-22 20:12
不错,顶起
#9
By17822007-08-23 22:44

还是不太明白啊,试了几次都没有成功,
可能我那里理解错了,但是我还是不清楚,
具体怎么做(步骤)
版主再指点一下小弟吧
跪谢了呀

#10
zmfttkl2007-12-29 17:31
顶!支持!
#11
vinson-lu2007-12-29 17:52
直接单击事件里去控制也可以,而且方便
#12
zklwzh2008-01-02 13:01
以前就是用AJAX来做,今天看到这里.受益了.
#13
loveling2008-01-02 21:15
写的太好了,不知道能不能弄好,弄好的话就不剩感激了
1