asp.net 2.0的page提供了ClientScript对象用来往前台注册js脚本,我们经常会用到executeblock和executestartup方法,基本上按照msdn上的解释两种方法没有多大区别,但最近发现正是由于没有正确的使用导致工作流引擎出现大BUG。executeblock是在标记<form runat='server'>就会触发,而executestartup是在</form>标记之前触发。我之前的代码这样写的:
- //Button_Click事件代码片断
- protected void Button1_Click(Object sender, EventArgs e)
- {
- ......
- this.ClientScript.RegisterScriptBlock(this.GetType(), "_js", "openDialog();");
- }
页面前台的openDialog用来执行提交页面的操作:
- function openDialog()
- {
- document.forms(0).action="abc.aspx?pPost=1";
- document.forms(0).submit();
- }
这样做的后果就是但执行提交页面操作后,页面的控件值全部丢失(例如TextBox),原因就在于页面还没有生成完毕就执行了提交(PostBack)操作,导致TextBox等控件的值被清空;解决办法就是将注册脚本方法改为RegisterScriptStartup,在页面form生成完毕后再做提交操作。
本文探讨了ASP.NET 2.0中通过Page对象的ClientScript属性向前端注册JavaScript脚本的方法,重点对比了executeblock与executestartup的区别,并通过一个实际案例展示了不当使用可能导致的问题及解决方案。

456

被折叠的 条评论
为什么被折叠?



