ScriptManager.RegisterStartupScript方法和Page.ClientScript.RegisterStartupScript() 方法

ScriptManager.RegisterStartupScript方法

如果页面中不用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。

注意:aspx代码是这样的

复制代码
ScriptManager.RegisterStartupScript方法和Page.ClientScript.RegisterStartupScript() 方法
< div >   
   < asp:UpdatePanel  ID ="UpdatePanel1"  runat ="server" >      
    < ContentTemplate >           
   < asp:TextBox  runat ="server"  ID ="TextBox2"   >          
    </ asp:TextBox >          
    < asp:Button  runat ="server"  Text ="Button"  ID ="Button1" onClick ="Button1_Click"   />      
    </ ContentTemplate >    
      < Triggers >         
     < asp:PostBackTrigger  ControlID ="Button1"   />    
      </ Triggers >   
    </ asp:UpdatePanel >
</ div >
复制代码

 

我在Button1_Click的事件里注册脚本,一定要加红色的部分,否则总是提示不能parse什么东西!

另外,js无法干涉cs代码。所以一旦脚本注册成功,js和cs代码会互不相干的各自运行。

 

以上的内容来自别人的文章,现在说一下自己的使用体会:

在按钮Button1的onClick事件中注册脚本可以这样写:ScriptManager.RegisterStartupScript(this.UpdatePanel1, Page.GetType(), System.DateTime.Now.Ticks.ToString(), "window.open('default2.aspx');", true);

页面中的红色部分也可以去掉了。

现在对第三个参数“脚本函数的名称”要特别说明一下,

如果在onClick事件中,使用该方法注册了两个脚本。如果注册的两个脚本函数的名称相同,则第二个脚本函数就不会执行。

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

 

Page.ClientScript.RegisterStartupScript() 方法

使用类型、键、脚本文本和指示是否添加脚本标记的布尔值向 Page 对象注册启动脚本。

参数

type

要注册的启动脚本的类型。

key

要注册的启动脚本的键。

script

要注册的启动脚本文本。

addScriptTags

指示是否添加脚本标记的布尔值.

备注:

启动脚本由它的键和类型唯一标识。具有相同的键和类型的脚本被视为重复脚本。只有使用给定的类型和键对的脚本才能使用该页面进行注册。试图注册一个已经注册的脚本不会创建重复的脚本。

调用 IsStartupScriptRegistered 方法以确定具有给定的键和类型对的启动脚本是否已经注册,从而避免不必要的添加脚本尝试。

RegisterStartupScript 方法的此重载中,使用 addScriptTags 参数可指示 script 参数中提供的脚本是否包装在 <script> 元素块中。将 addScriptTags 设置为 true 指示脚本标记将自动添加。

RegisterStartupScript 方法添加的脚本块在页面加载完成但页面的 OnLoad 事件引发之前执行。

示例

 

<%@ Page Language="C#"%>

<script runat="server">

public void Page_Load(Object sender, EventArgs e)

{

// Define the name and type of the client scripts on the page.

String csname1 = "PopupScript";

String csname2 = "ButtonClickScript";

Type cstype = this.GetType();

// Get a ClientScriptManager reference from the Page class.

ClientScriptManager cs = Page.ClientScript;

// Check to see if the startup script is already registered.

if (!cs.IsStartupScriptRegistered(cstype, csname1))

{

String cstext1 = "alert('Hello World');";

cs.RegisterStartupScript(cstype, csname1, cstext1, true);

}

// Check to see if the client script is already registered.

if (!cs.IsClientScriptBlockRegistered(cstype, csname2))

{

StringBuilder cstext2 = new StringBuilder();

cstext2.Append("<script type=text/javascript> function DoClick() {");

cstext2.Append("Form1.Message.value='Text from client script.'} </");

cstext2.Append("script>");

cs.RegisterClientScriptBlock(cstype, csname2, cstext2.ToString(), false);

}

}

</script>

<html>

<head>

<title>ClientScriptManager Example</title>

</head>

<body>

<form id="Form1"

runat="server">

<input type="text" id="Message"> <input type="button" value="ClickMe" onclick="DoClick()">

</form>

</body>

</html>

你可能感兴趣的:(startup)