asp.net后台调用javascript的方法

1. 用Response.Write方法

  代码如下:

  Response.Write("<script type='text/javascript'>alert("XXX");</script>");
  此方法缺陷就是不能调用脚本文件中的自定义的函数,只能调用内部函数,具体调用自定义的函数只能在Response.Write写上函数定 义,比如

  Response.Write("<script type='text/javascript'>function myfun(){}</script>");

3.普通的添加控件的Attributes属性

  对于普通按钮就是:Button1.Attributes.Add("onclick","MyFun();");

  只能在Onload中或类似于onload的初始化过程中添加才有效。而且是先执行脚本函数,无法改变执行顺序。

2.用ClientScript类

  代码如下:在想调用某个javascript脚本函数的地方添加代码,注意要保证MyFun已经在脚本文件中定义过了。

  ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>MyFun();</script>");

  这个方法比Response.Write更方便一些,可以直接调用脚本文件中的自定义函数。

ClientScript.RegisterStartupScript方法有3个重载:

1:RegisterStartupScript(Page, String, String) 向 ScriptManager 控件注册一个启动脚本块并将该脚本块添加到页面中。需要向第三个参数添加<script></script>脚本标签。第一个参数为页面Page。第二个脚本函数的名字,随便起。第三个是<script></script>形式的脚本内容。

2:RegisterStartupScript(Control, Type, String, String, Boolean) 使用 ScriptManager 控件为 UpdatePanel 中的某个控件注册一个启动脚本块,并将该脚本块添加到页面中。第一个参数为要注册脚本的控件ID,试了一下,只要是本页面的就行。第二个参数为注册脚本控件类型,是控件还是this的GetType()都可以,typeOf(string)也没问题.第三个脚本函数的名字,随便起。第四个是脚本内容。第五个是标明是否再添加脚本标签,如果第四个参数里包含了<script></script>标签,此处则为false,否则为true。

3:RegisterStartupScript(Page, Type, String, String, Boolean) 为每个异步回发向 ScriptManager 控件注册一个启动脚本块,并将该脚本块添加到页面中。页面如果有用到Ajax需要用到这种。第一个参数为页面Page。第二个参数为注册脚本控件类型,是控件还是this的GetType()都可以,typeOf(string)也没问题.第三个脚本函数的名字,随便起。第四个是脚本内容。第五个是标明是否再添加脚本标签,如果第四个参数里包含了<script></script>标签,此处则为false,否则为true。

如果页面中不用Ajax,cs中运行某段js代码方式可以是:
Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>window.open('default2.aspx')</script>");
如果页面中使用了Ajax ,则上述代码即使执行也无效果。对这种情况我们通常采用:
ScriptManager.RegisterStartupScript(this.Button1, this.GetType(), "alertScript", "window.open('default2.aspx');", true);
其中第一个参数为要注册脚本的控件ID,试了一下,只要是本页面的就行。
第二个参数为注册脚本控件类型,是控件还是this的GetType()都可以,typeOf(string)也没问题.
第三个脚本函数的名字,随便起。
第四个是脚本内容。
第五个是标明是否再添加脚本标签,如果第四个参数里包含了<script></script>标签,此处则为false,否则为true。

如果注册的两个脚本函数的名称相同,则第二个脚本函数就不会执行。因为脚本管理器使用此字符串来分析是否是一个已经加载过的脚本,如果加载过,将不会再次渲染。所以第二个就不会加载执行了。

原文地址:https://www.cnblogs.com/renfeng/p/4112705.html