请看看我这个帖子,谈谈你的看法好吗
http://expert.csdn.net/Expert/topic/1525/1525563.xml?temp=.3987543

解决方案 »

  1.   

    to jjstar:
    我完全赞同你的想法,事实上,我也是这么实现的,当然实现细节上有一点区别。跟很多人一样,我也认为2次回发既浪费时间,又浪费网络资源,但是,有时候2次回发还是必需的。让我们来探讨一下这些回发事件。
    第1次回发发生在用户要弹出对话框的时候:
    对于这次回发,有2种可能,一是需要服务端交互,如由服务器端经过一定处理后才决定是否弹出结话框,或者弹出的对话框的信息需要一些服务端数据,这种情况下,回发是不可避免的;第二就是不需要服务端的数据的话,这种情况下,直接用js可以简单实现,如:myButton.Attributes.Add("onclick", "confirm(.....)"),那么在这种情况下,我为什么不阻止回发呢?原因也有2点:1是我把使用该控件的环境定位在局域网中,在局域网中,用户对于回发是不太敏感的;2是如果做成控件的话,太复杂,最起码,应该做三个控件,分别对应原来的Button,ImageButton, LinkButton,这还不包括HtmlButton,HtmlImage, HtmlAnchor。
    第2次是发生在用户关闭对话框的时候:
    这一次,在大部分情况下,特别是当用户在对话框中选择OK后,是应该回发至服务端,对于用户选择Cancel则大部分不需要回发。事实上,在我的控件中可以用把OnOkScript或OnCancelScript设成"return;"就可以阻止OK或Cancel时的回发,而在volitant的控件中,好象只要不设相应的事件处理函数就行了(听volitant的介绍,好象是这样)。对于我与volitant的控件,我认为优点在于:1、不必在asp.net页中另写弹出对话框的客户端代码(这是卖点);2、弹出对话框并不局限于按下按钮时,你在任何时候,特别地,在Page_Load事件中,也可以弹出(不过千万别这么试)