asp.net后台调用前台脚本代码

服务器调用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> 


还有更多精彩请参考http://www.cnblogs.com/dolphinX/p/3335610.html

原文地址:https://www.cnblogs.com/lijnlong/p/3336291.html