服务器调用JavaScript方法是个不错的路子,但理论上是不可能,服务器给浏览器的时一个新的HTML文本,又不是调用函数的句柄,但是如果我们往新的HTML页面里添加的调用此方法的语句不就实现了吗?来看看我们怎么实现向新的HTML文本中添加调用JavaScript的语句。
<form id="form1" runat="server"> <div id="test"> 改我</div> <div> <asp:Button ID="btnModify" runat="server" Text="Modufy" OnClick="btnModify_Click" /> </div> </form> <script type="text/javascript"> function modifyDivLiteral(newliteral) { //.............. //一系列不是服务器改文字能处理的操作,比如创建新的Array、改变Div背景颜色,调用其他JavaScript函数 //............ document.getElementById('test').innerHTML = newliteral; } </script> <script type="text/javascript"> <asp:Literal ID="ltrScript" runat="server"></asp:Literal> </script>
在后台我们调用:
protected void btnModify_Click(object sender, EventArgs e) { this.ltrScript.Text = "modifyDivLiteral('改好了');"; }
上面是一种思路,但这写起来很别扭;body里面包含了一段空的script;
接下来我讲一下不在body写script,我们到后台注册script;
.net有了几个内置函数解决服务器端向页面注册脚本的问题。
Page.ClientScript.RegisterClientScriptBlock
把脚本注册到页面顶部
Page.ClientScript.RegisterStartupScript
把脚本注册到页面底部
Page.ClientScript.RegisterClientScriptInclude
向页面注册脚本文件
三个函数其中前两个是注册代码就可以了,后一个是脚本文件;他们区别可以分别在后台调用一下看源文件就知道区别了。
如果注册到<form> 头部 ,此时HTML还未加载!
//如果注册js要查找id,js就会报 缺少对象无法起到效果
<body> <form name="form1" method="post" action="WebForm2.aspx" id="form1"> <div> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTIwMzA0OTI0NmRkb5pdNw/Vv10/Q9n9ad/jEwK2+/s=" /> </div> <script type="text/javascript"> //<![CDATA[ Test('tbAge');//]]> </script> <div> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQLXirGLDwKx8PK6AwKKrODaDQKV6deQBQKV6e+nCAlhcbod/3hgbNU1kDPqZcAKQ2gv" /> </div> <input name="tbName" type="text" value="name" id="tbName" /> <input name="tbAge" type="text" value="age" id="tbAge" /> <input type="submit" name="BtnTest" value="RegisterStartupScript 隐藏age输入框" id="BtnTest" /> <input type="submit" name="BtnTest2" value="RegisterClientScriptBlock 隐藏age输入框" id="BtnTest2" /> </form>
注册脚本最后加载,js可以表单内所有元素。
<body> <form name="form1" method="post" action="WebForm2.aspx" id="form1"> <div> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTIwMzA0OTI0NmRkb5pdNw/Vv10/Q9n9ad/jEwK2+/s=" /> </div> <div> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQLXirGLDwKx8PK6AwKKrODaDQKV6deQBQKV6e+nCAlhcbod/3hgbNU1kDPqZcAKQ2gv" /> </div> <input name="tbName" type="text" value="name" id="tbName" /> <input name="tbAge" type="text" value="age" id="tbAge" /> <input type="submit" name="BtnTest" value="RegisterStartupScript 隐藏age输入框" id="BtnTest" /> <input type="submit" name="BtnTest2" value="RegisterClientScriptBlock 隐藏age输入框" id="BtnTest2" /> <script type="text/javascript"> //<![CDATA[ Test('tbAge');//]]> </script>
注册时脚本文件,需要知道js的路径。
<body> <form name="form1" method="post" action="WebForm2.aspx" id="form1"> <div> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTIwMzA0OTI0NmRkb5pdNw/Vv10/Q9n9ad/jEwK2+/s=" /> </div> <script src="Test('tbAge');" type="text/javascript"></script> <div> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQLXirGLDwKx8PK6AwKKrODaDQKV6deQBQKV6e+nCAlhcbod/3hgbNU1kDPqZcAKQ2gv" /> </div> <input name="tbName" type="text" value="name" id="tbName" /> <input name="tbAge" type="text" value="age" id="tbAge" /> <input type="submit" name="BtnTest" value="RegisterStartupScript 隐藏age输入框" id="BtnTest" /> <input type="submit" name="BtnTest2" value="RegisterClientScriptBlock 隐藏age输入框" id="BtnTest2" /> </form> </body>