观星者

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

这篇文章是我之前发表在CSDN上的,现在也想同各位园友分享一下。

最近客户在使用我们交付的网站的时候遇见了这样的问题:在页面某个功能按钮点击之后不知道发生了什么(或者是有提示没发现,或者是存在延迟),然后就多次点击页面,造成了输入大量空信息的结果。
回头在网上查了一下解决的方法。参考如下:


chinafine的防止asp.net页面多次提交数据


以及一些其他的网站上的方法,基本可以解决问题。但是有一些问题需要总结。
首先说下代码:

代码
protected void Page_Load(object sender, EventArgs e)
{
//.net1.1
Button1.Attributes.Add("onclick", "this.disabled=true;" + this.GetPostBackEventReference(this.Button1));

//.net 2.0以上
Button1.Attributes.Add("onclick", "this.disabled=true;" + this.ClientScript.GetPostBackEventReference(Button1, ""));

}


基本思路就是在点击事件前追加"this.disable=true;"的脚本把按钮禁用掉,然后再执行原来的回传。
我要总结的是,依据参考另外的解决方案,可以在页面嵌入jQuery脚本来做效果,比如等待或者其他给客户有个提示的表示,这样可以提高用户体验。
以上代码是就问题解决问题,可以有如下改进:
1)结合页面脚本,提供与用户更好的交互行为。
2)可以在1)的基础之上将提高用户体验的脚本及文字等内容统一配置和管 理起来,以便修改和复用。
3)上面的代码只是针对一个按钮的操作,在实际情况下一个页面的按钮会有很多个,应该用函数和列表等统一的方式进行管理,否则不便于以后的修改。
4)在实际情况中,页面往往都放在母版页里面,而且可能套好几层,这样不同层面上的按钮或者其他控件在使用嵌入的脚本时就要考虑冲突的问题,可以参考微软在ASP.NET使用的方法,比如放在ContentPlaceHolder里的控件解释出来之后id属性就如id="$ct01_xxxx"的样子,以避免名称冲突。在使用脚本时就要考虑脚本函数名称的冲突。

posted on 2010-10-14 15:01  观星者  阅读(698)  评论(0编辑  收藏  举报