ASP.NET服务端执行js脚本,备忘

T_T : [之所以需要用到以下方式来在客户端执行js脚本是因为ASP.NET中的OnClick和OnClientClick的机制问题。(Html页面中的元素(比如button)的onclick不止绑定一个方法,其中绑定的方法有OnClientClick注册的,也有OnClick注册的,关键是OnClientClick注册的方法总是被放在OnClick注册的方法前面,如下例子)]

Confusion:

1 <asp:Button  OnClick="btnSave_Click" OnClientClick="javascript:RefreshGrid();" runat="server" />
2
3 ###########################################################################################################################################
4 html页面结果:
5
6 <input type="submit" name="ctl00$MainContent$btnSave" value="保存"
onclick="javascript:RefreshGrid(); WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$MainContent$btnSave&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))"
class="button" />
#############################################################################################################################################

解决方法:

Template:

1 var jsCode= "<script language='javascript'>(function (){ /*你的js代码*/})();  </script>";
2 if (!this.ClientScript.IsStartupScriptRegistered(this.GetType(), "jsCode"))
3 {
4   this.ClientScript.RegisterStartupScript(GetType(), "jsCode", jsCode);
5 }

Example:

1 var refresh = "<script language='javascript'>(function (){ window.parent.RefreshGrid();})();  </script>";
2 if (!this.ClientScript.IsStartupScriptRegistered(this.GetType(), "refresh"))
3 {
4   this.ClientScript.RegisterStartupScript(GetType(), "refresh", refresh);
5 }