使用clientscriptmanager向客户端注册脚本
使用clientscriptmanager向客户端注册脚本
clientscriptmanager在非异步(就是说非ajax)环境下使用的。如果要在异步环境下注册脚本应该使用scriptmanager的静态方法来注册(scriptmanager兼容异步于非异步环境下注册脚本)。clientscriptmanager中注册脚本的方法在scriptmanager中都有一一对应的方法,但是有一些区别,scriptmanager中的方法多了一个参数(多了第一个参数),而且使用scriptmanager来注册脚本不是绝对能注册成功的。
.aspx文件代码
<%@ page language="c#" autoeventwireup="true" codefile="clientscriptmanager.aspx.cs" inherits="demo4_clientscriptmanager" %>
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>clientscriptmanager</title>
</head>
<body>
<form id="form1" runat="server">
<asp:button id="button1" runat="server" text="button" onclick="button1_click" />
</form>
</body>
</html>
.aspx.cs文件代码
using system;
using system.data;
using system.configuration;
using system.collections;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.web.ui.htmlcontrols;
public partial class demo4_clientscriptmanager : system.web.ui.page
{
protected void page_load(object sender, eventargs e)
{
}
protected void button1_click(object sender, eventargs e)
{
clientscriptmanager cs = this.clientscript;
cs.registerarraydeclaration("hello", "1, 2, 3");//#1
cs.registerclientscriptblock(this.gettype(), "helloworld", "function helloworld(){alert(1);}", true);//#2
cs.registerclientscriptinclude("helloworld", "helloworld.js");//#3
cs.registerexpandoattribute(this.button1.clientid, "hello", "world");//#4
cs.registerhiddenfield("hello", "world");//#5
cs.registeronsubmitstatement(this.gettype(), "helloworld", "return window.confirm('do you really want to submit the form?')");//#6
cs.registerstartupscript(this.gettype(), "helloworld", "<script>alert('the page has loaded!')</script>");//#7
}
}
生成页面的html代码
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"
"http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>clientscriptmanager</title></head>
<body>
<form
"id="form1"
name="form1"
method="post"
action="clientscriptmanager.aspx"
onsubmit="javascript:return
webform_onsubmit();>
<div>
<!-- #5 -->
<input type="hidden" name="hello" id="hello" value="world" />
<input type="hidden" name="__viewstate" id="__viewstate" value="/wepdwukmtq2otkzndmymwrkdcwxevaf9qgysiadua9rcaihgnk=" />
</div>
<!-- #2 -->
<script type="text/javascript">
<!--
function helloworld(){alert(1);}// -->
</script>
<!-- #3 -->
<script src="helloworld.js" type="text/javascript"></script>
<!-- #6 -->
<script type="text/javascript">
<!--
function webform_onsubmit() {
return window.confirm('do you really want to submit the form?');
return true;
}
// -->
</script>
<input type="submit" name="button1" value="button" id="button1" />
<!-- #1 -->
<script type="text/javascript">
<!--
var hello = new array(1, 2, 3);
// -->
</script>
<!-- #4 -->
<script type="text/javascript">
<!--
var button1 = document.all ? document.all["button1"] : document.getelementbyid("button1");
button1.hello = "world";
// -->
</script>
<div>
<input
type="hidden"
name="__eventvalidation" id="__eventvalidation"
value="/wewagket4kwbgkm54rgbikwluzshp4emnxna3f0qtbfnfuo" />
</div>
<!-- #7 -->
<script>alert('the page has loaded!')</script>
</form>
</body>
</html>
使用scriptmanager向客户端注册脚本
使用scriptmanager来向客户端注册脚本时,不一定每次都会成功生效,只有updatepanel更新了,才会注册成功。因为注册脚本的行为是在updatepanel更新后执行的。
.aspx文件代码
<%@ page language="c#" autoeventwireup="true" codefile="scriptmanagerreg.aspx.cs" inherits="demo5_scriptmanagerreg" %>
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>scriptmanagerreg</title>
</head>
<body>
<form id="form1" runat="server">
<asp:scriptmanager id="scriptmanager1" runat="server">
</asp:scriptmanager>
<asp:updatepanel id="updatepanel1" runat="server">
<contenttemplate>
<%= datetime.now %>
<asp:button id="button1" runat="server" text="button" onclick="button1_click1" />
</contenttemplate>
</asp:updatepanel>
<asp:updatepanel id="updatepanel2" runat="server" updatemode="conditional">
<contenttemplate>
<%= datetime.now %>
</contenttemplate>
</asp:updatepanel>
</form>
</body>
</html>
.aspx.cs文件代码
using system;
using system.data;
using system.configuration;
using system.collections;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.web.ui.htmlcontrols;
public partial class demo5_scriptmanagerreg : system.web.ui.page
{
protected void page_load(object sender, eventargs e)
{
}
protected void button1_click1(object sender, eventargs e)
{
//#1
scriptmanager.registerstartupscript(this.updatepanel1, this.gettype(), "updatepanel1", "alert(1)", true);
//#2
scriptmanager.registerstartupscript(this.updatepanel2, this.gettype(), "updatepanel2", "alert(2)", true);
}
}
说明
运行程序后,第一个时间会更新,更新后会alert(1);
因为updatepanel2的updatemode="conditional",不是每次都更新,所以不会有alert(2);
只要updatepanel2的updatemode="always",则updatepanel2每次都更新,因为能更新了,所以alert(2);就会注册成功。