作者:donna donna.zdn@gmail.com 自由转载 但请保留作者信息

    关于IE WebControls,也许您早就知道了吧,它不仅小巧而且开源,您可以从中学到.net控件开发的一些技巧。最近在用它的Toolbar控件来实现一些工具条,嗯,用起来很简单,效果也不错(尤其是在IE里,不加任何修饰就可以实现象WinForm上的工具,不愧是微软开发的)。但是有个缺点就是不支持客户端事件,比如我有个“删除”按钮,想在用户点击后确认是否删除,如果确认则提交到服务器执行删除操作,否则不提交。结果翻遍了Toolbar的所有属性、方法也没有找到如何设置让某个按钮调用特定的客户端脚本。既然它是开源的,那就自己实现个方法吧!

    我的想法是为Toolbar的Button提供一个属性,通过设置该属性为一个客户端脚本的方法的名称来实现脚本的调用,该方法返回一个布尔值,如果为true则提交到服务器,false则不提交。

实现步骤:
1、通过分析源代码,ToolbarButton类是在ToolbarButton.cs文件中实现的,因此ToolbarButton.cs添加ClientClickMethod属性

        }

 
2、修改WriteItemAttributes方法将属性指定的方法对应到客户端控件的onclick方法上
 

扩展IE WebControls之一:让Toolbar支持客户端事件protected override void WriteItemAttributes(HtmlTextWriter writer)

    您也许会问,为什么不用类似onclick="return confirm('Message');"的方法来实现呢?原因为是IE在显示有Toolbar的页面时是调用toolbar.htc中的脚本来生成Toolbar的(这也就是为什么安装IE WebControls时要把Runtime目录下的内容复制到Web站点根目录下的webctrl_client\1_0目录下的原因),而它的__doPostBack方法是在整个Toolbar上调用,而不是某个ToolButton上调用的,虽然在ToolButton上return false了但不能阻止其PostBack,因此这里采用了一种变通的方法,先在ToolButton的onclick中设置一个标志即event.srcElement._IsCanceled,然后在PostBack之前检查这个标志,如果为true则不提交。
3、修改toolbar.htc脚本

扩展IE WebControls之一:让Toolbar支持客户端事件function f_OnClick()

4、可有可无,修改runtime文件的路径
    如果您不希望把Runtime目录下的内容复制到Web站点根目录下的webctrl_client\1_0目录中,您只要改一下BaseRichControl.cs文件的AddPathToFilename函数就行,这里把它改到了虚拟目录的webctrl_client\1_0目录中

扩展IE WebControls之一:让Toolbar支持客户端事件  internal static string AddPathToFilename(HttpContext context, string filename)
        }

 

    现在可以试试效果了,结果发现在IE中一切正常,在Firefox中完全没有效果,对比IE和Firefox生成的HTML代码发现asp.net对他们的实现机制不一样(具体也不太清楚,知道的朋友可以说说)。
5、支持Firefox
    修改ToolbarButton.cs文件AddAnchorAttributes方法

扩展IE WebControls之一:让Toolbar支持客户端事件    //modified by donna,2006-8-8;用来支持FireFox
扩展IE WebControls之一:让Toolbar支持客户端事件
            if (ClientClickMethod != String.Empty)
modify end

 

使用方法:
1、运行build.bat编译控件;
2、将src\runtime\目录下所有内容复制到你的WEB应用程序目录的webctrl_client\1_0\目录下;
3、请参考演示程序使用。

环境:WIN2003、IIS6、VS2003、Framework1.1、IE6、FireFox1.5

 效果图
扩展IE WebControls之一:让Toolbar支持客户端事件

代码下载

donna.zdn@gmail.com

相关文章:

  • 2021-07-17
  • 2022-12-23
  • 2021-11-01
  • 2022-01-09
  • 2021-07-07
猜你喜欢
  • 2022-03-01
  • 2021-09-26
  • 2022-12-23
  • 2022-12-23
  • 2021-07-18
  • 2021-09-14
  • 2021-12-19
相关资源
相似解决方案