RegisterStartupScript和执行顺序

Nic*_*ick 5 javascript asp.net

ScriptManager.RegisterStartupScript用来注册大量JS函数的调用.

ScriptManager.RegisterStartupScript(this, this.GetType(), "Script1", "SomeScript1", true);
ScriptManager.RegisterStartupScript(this, this.GetType(), "Script2", "SomeScript1", true);
ScriptManager.RegisterStartupScript(this, this.GetType(), "EndScript", "EndScript", true);
Run Code Online (Sandbox Code Playgroud)

呈现HTML时,它会按顺序添加它们.

<script type="text/javascript">
//<![CDATA[
other functions calls..
SomeScript1();SomeScript2();EndScript();
//]]>
</script>
Run Code Online (Sandbox Code Playgroud)

但是,当我在调试模式中单步执行时,脚本的执行不按顺序EndScript执行(例如:先执行SomeScript1或执行SomeScript2)

是不是ScriptManager.RegisterStartupScript按照添加的顺序执行了?如果没有,有什么替代方案(我想总是EndScript在最后执行)

bdu*_*kes 6

从MSDN页面RegisterStartupScript:

使用注册的启动脚本块RegisterStartupScript不保证按照注册的顺序输出.如果启动脚本块的顺序很重要,请使用 StringBuilder对象在单个字符串中收集脚本块,然后将它们全部注册为单个启动脚本.

在将它们呈现给页面之后,脚本的实际执行由浏览器处理,并且与ScriptManager控件没有任何关系.查看您发布的示例,浏览器应按照它们编写的顺序执行.您的EndScript功能是否也可以通过页面上的其他内容调用?此外,如果您正在使用任何类型的回调,那么回调完成的时间是不确定的.您能提供每个脚本中的代码示例吗?