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生成完毕后再做提交操作。