服务器控件之二

在ASPNET页面上包含自定义的JavaScript函数,有两种方式:第一种方式是把Javascript直接应用于页面上的控件。

 

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body onload="javascript:document.forms[0]['tb1'].value=Date();">
    <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="tb1" runat="server" Width="300"></asp:TextBox>
    </div>
    </form>
</body>
</html> 

 

 

即使使用的是Web服务器控件(标准TextBox服务器控件),仍能使用JavaScript在<body>元素的Onload属性中访问这个控件。通过使用服务器控件的Id属性,onload属性能指向特定的服务器控件。采用这个方法,还可以在页面上访问其他服务器控件。

 

ASPNET使用Page.ClientScript属性在页面上注册和使用JavaScript函数。

这里介绍3个比较有用的方法(更多的方法和属性可以通过ClientScript对象来获得

 

1、RegisterClientScirptBlock方法可以把JavaScript函数放在页面的顶部。(该脚本用于在浏览器中启动页面)

 

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim myScript As String = "function AlertHello(){alert('Hello ASP.NET');}"
        Page.ClientScript.RegisterClientScriptBlock(Me.GetType, "MyScript", myScript, True)
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Adding JavaScript</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Button ID="Button1" Text="AlertHello" runat="server" OnClientClick="AlertHello()" />
    </div>
    </form>
</body>
</html> 

 


使用Page.ClientScript.RegisterClientScriptBlock方法注册页面上的脚本。这样,.NET就自动把脚本放在页面上的<script>标记中。

 

2、Page.ClientScript.RegisterStartupScript

它与RegisterClientScriptBlock方法的区别不大,最大的区别在于它吧脚本放在ASPNET页面的底部,而不是顶部。

 

大多数情况下,应使用RegisterStartupScript方法,而不是RegisterClientScriptBlock方法

如果使用RegisterClientScriptBlock,并且在Javascript引用控件值,运行这个页面,就会产生一个Javascript错误。

出错的原因是Javascript函数在文本框被放置到屏幕之前就已触发。所有Javascript函数没有找到TextBox1,导致页面抛出一个错误。

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim myScript As String = "alert(document.forms[0]['textbox1'].value);"
        Page.ClientScript.RegisterStartupScript(Me.GetType, "mykey", myScript, True)
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="textbox1" runat="server" >张继科,有你的节拍,全世界都是我们的主场!</asp:TextBox>
    
    <asp:Button ID ="button1" runat="server" OnClientClick="mykey" Text="点我"/>
    </div>
    </form>
</body>
</html>

 

这个方法把Javascript函数放在 页面的底部,所以实际启动时,就会找到textbox1元素,并按照希望的那样操作。

 

 

3、Page.ClientScript.RegisterClientScriptInclude

把Javascript放在js文件中,是最好的方式(因为很容易把对javascript的修改应用于整个应用程序)。

使用RegisterClientScriptInclude方法可以在ASPNET页面上注册脚本文件

Dim myScript As String=”myJavaScriptCode.js”
Page.ClientScript.RegisterClientScriptInclude(“myKey”,myScript)

 

这会在ASPNET页面上创建如下代码:

<script src=”myJavaScriptCode.js” type=”text/javascript”></script>

 

 

ASPNET 3.5包含客户端回调功能,可以获取页面值,并把它们填充到已生成的页面上,而无须重新生成页面。这个功能是在ASPNET 2.0中引入,不需要进行整个回送循环,就可以修改页面上的值。也就是说,在更新页面时可以不重新绘制全部页面。使用回调功能,需要了解一些Javascript知识。

 

典型ASPNET页面的当前回送功能

在页面上触发一个页面事件,处理典型的回送内容时,要进行许多操作。比如:页面事件触发回送作为Post请求、初始化、加载状态、处理回送数据、加载、回送事件、保存状态、预显示、显示、卸载

正常的回送情况下,某个事件触发一个要发送给Web服务器的HTTP Post请求。该事件会把Post请求发送给Web服务器,Web服务器再使用IPostbackEventHandler处理该请求,并通过一系列页面事件运行该请求。这些事件包括加载状态(在页面的视图状态中)、处理数据、处理回送事件,最后是显示所用浏览器解释的页面。该过程会在浏览器中重新加载页面,使页面上部出现闪烁现象并重新排列

 

使用新的回调功能,事件的发生会把该事件传送给脚本事件处理程序(一个Javascript函数),该处理程序给Web服务器传送一个要处理的异步请求,ICallBackEventHandler通过一个类似于回送中使用的管道来运行请求,加载了信息后,结果就返回给脚本回调对象。加载了信息后,结果就返回给脚本回调对象,然后,脚本代码使用Javascript的功能把这些数据放在Web页面上,而无须刷新页面。

 

 

 

 

 

 

 

 

 

 

posted @ 2012-04-17 10:11  怒杀神  阅读(474)  评论(0编辑  收藏  举报