首页 | 麦客学吧 | 视频教程 | FLASH小游戏 | 素材下载 | 常用工具
您当前的位置:首页 > 程序开发 > ASP.NET > 正文

撰写ScriptManager来管理客户端指令码

出处:麦客学吧 [2008-8-1 8:36:40] 点击数:173
摘要

一般在注册客户端指令码都是使用 Page.ClientScript 属性,不过当 ASP.NET AJAX 出来后,有使用 UpdatePanel 时就需要改用 ScriptManager 来取代部分注册客户端指令码的动作。不过这样有时要使用 ClientScript,有时要使用 ScriptManager 来管理客户端指令码,感觉有点麻烦。而且不知那天又会有 ASP.NET AJAX 2 跑出来,是否又会有新的 ScriptManager2,到时是不是又要改写部分注册客户端指令码的程序代码呢?

撰写自用的 ScriptManager

当有使用 ASP.NET AJAX 时,一定要使用 ScriptManager 来注册客户端指令码;可是又不能完全不用 ClientScript,因为有些方法(例如 GetPostBackEventReference 方法) 在 ScriptManager 并不提供。
所以我们要撰写自用的 ScriptManager 来统一管理客户端指令码的所有方法,我们将撰写 TBScriptManager 类别,整合原来 ClientScript 及 ScriptManager 所提供的方法,然后 BasePage 新增一个 BeeScript 属性来操作 TBScriptManager 对象。

点击查看完整图片_麦客教程网_www.MaiCoo.com

首先我们要新增 TBScriptManager 类别,建构函式需传入 Page 对象,其中会包含 ScriptManager 有提供的方法,例如 RegisterStartupScript、RegisterClientScriptBlock ... 等方法,也会包含 ClientScript 有提供的方法,例如 GetPostBackEventReference、GetPostBackClientHyperlink ... 等方法。这里只例举出部分的方法,其它 ScriptManager 及 ClientScript 方法可以使用相同方式实现。
 1Imports System.Web.UI

 2
 3/**/''' <summary>
 4''' 客户端指令码管理。
 5''' </summary>
 6Public Class TBScriptManagerClass TBScriptManager
 7    Private FPage As System.Web.UI.Page
 8
 9    /**/''' <summary>
10    ''' 建构函式。
11    ''' </summary>
12    ''' <param name="Page">Page 物件。</param>
13    Sub New()Sub New(ByVal Page As System.Web.UI.Page)
14        FPage = Page
15    End Sub
16
17    /**/''' <summary>
18    ''' 注册启始客户端指令码。
19    ''' </summary>
20    ''' <param name="Key">索引键。</param>
21    ''' <param name="Script">客户端指令码。</param>
22    ''' <param name="AddScriptTags">表示是否加入指令码标记。</param>
23    Public Sub RegisterStartupScript()Sub RegisterStartupScript(ByVal Key As String, ByVal Script As String, Optional ByVal AddScriptTags As Boolean = True)
24        ScriptManager.RegisterStartupScript(FPage, FPage.GetType(), Key, Script, AddScriptTags)
25    End Sub
26
27    /**/''' <summary>
28    ''' 注册客户端指令码。
29    ''' </summary>
30    ''' <param name="Key">索引键。</param>
31    ''' <param name="Script">客户端指令码。</param>
32    ''' <param name="AddScriptTags">表示是否加入指令码标记。</param>
33    Public Sub RegisterClientScriptBlock()Sub RegisterClientScriptBlock(ByVal Key As String, ByVal Script As String, Optional ByVal AddScriptTags As Boolean = True)
34        ScriptManager.RegisterClientScriptBlock(FPage, FPage.GetType, Key, Script, AddScriptTags)
35    End Sub
36
37    /**/''' <summary>
38    ''' 注册页面 OnSubmit 的客户端指令码。
39    ''' </summary>
40    ''' <param name="Key">索引键。</param>
41    ''' <param name="Script">客户端指令码。</param>
42    Public Sub RegisterOnSubmitStatement()Sub RegisterOnSubmitStatement(ByVal Key As String, ByVal Script As String)
43        ScriptManager.RegisterOnSubmitStatement(FPage, FPage.GetType, Key, Script)
44    End Sub
45
46    /**/''' <summary>
47    ''' 注册客户端指令码 Include。
48    ''' </summary>
49    ''' <param name="Key">索引键。</param>
50    ''' <param name="Url">客户端指令码 Include URL。</param>
51    Public Sub RegisterClientScriptInclude()Sub RegisterClientScriptInclude(ByVal Key As String, ByVal Url As String)
52        ScriptManager.RegisterClientScriptInclude(FPage, FPage.GetType, Key, Url)
53    End Sub
54
55    /**/''' <summary>
56    ''' 取得引发 PostBack 的客户端指令码(其开头附加了 javascript:)。 
57    ''' </summary>
58    ''' <param name="Control">控件。</param>
59    ''' <param name="Argument">参数。</param>
60    ''' <param name="RegisterForEventValidation">事件是否进行验证。</param>
61    Public Function GetPostBackClientHyperlink()Function GetPostBackClientHyperlink(ByVal Control As Control, ByVal Argument As String, _
62        Optional ByVal RegisterForEventValidation As Boolean = False) As String
63        Return FPage.ClientScript.GetPostBackClientHyperlink(Control, Argument, RegisterForEventValidation)
64    End Function
65
66    /**/''' <summary>
67    ''' 取得引发 PostBack 的客户端指令码。
68    ''' </summary>
69    ''' <param name="Options">定义回传的 PostBackOptions。</param>
70    ''' <param name="RegisterForEventValidation">事件是否进行验证。</param>
71    Public Function GetPostBackEventReference()Function GetPostBackEventReference(ByVal Options As PostBackOptions, _
72        Optional ByVal RegisterForEventValidation As Boolean = False) As String
73        Return FPage.ClientScript.GetPostBackEventReference(Options, RegisterForEventValidation)
74    End Function
75
76    /**/''' <summary>
77    ''' 取得引发 PostBack 的客户端指令码。
78    ''' </summary>
79    ''' <param name="Control">控件。</param>
80    ''' <param name="Argument">参数。</param>
81    ''' <param name="RegisterForEventValidation">事件是否进行验证。</param>
82    Public Function GetPostBackEventReference()Function GetPostBackEventReference(ByVal Control As Control, ByVal Argument As String, _
83        ByVal RegisterForEventValidation As Boolean) As String
84        Return FPage.ClientScript.GetPostBackEventReference(Control, Argument, RegisterForEventValidation)
85    End Function
86
87End Class

在 BasePage 中新增一个 BeeScript 属性,来操作 TBScriptManager 对象。
 1/**/''' <summary>

 2''' 页面基础类别。
 3''' </summary>
 4Public Class TBBasePageClass TBBasePage
 5    Inherits System.Web.UI.Page
 6
 7    Private FBeeScrit As TBScriptManager = Nothing
 8
 9    /**/''' <summary>
10    ''' 客户端指令码管理。
11    ''' </summary>
12    Public ReadOnly Property BeeScript()Property BeeScript() As TBScriptManager
13        Get
14            If FBeeScrit Is Nothing Then
15                FBeeScrit = New TBScriptManager(Me)
16            End If
17            Return FBeeScrit
18        End Get
19    End Property
20
21End Class

若你想让开发人员一样可以保有使用 ClientScript 的习惯,但其背后已经是使用 TBScriptManager 对象,那就狠一点直接使用 Shadows 遮蔽掉 ClientScript 属性,让他们完全用不到旧的 ClientScript 属性。
1    Public Shadows ReadOnly Property ClientScript()Property ClientScript() As TBScriptManager

2        Get
3            If FBeeScrit Is Nothing Then
4                FBeeScrit = New TBScriptManager(Me)
5            End If
6            Return FBeeScrit
7        End Get
8    End Property

【责任编辑: lanier

昵 称:麦客网友[游客]  如果您不想匿名评论请先登录注册
评 论:请自觉遵守互联网相关政策法规,管理员有权删除恶意评论、广告和违禁词语。

验证码: 验证码,看不清楚?请点击刷新验证码    
麦客酷站赏析频道

精彩图文推荐

关于本站 - 联系站长 - 广告服务 - 合作伙伴 - 网站地图 - 版权声明 - 报告错误 - 收藏本站 | Http://www.MaiCoo.com

Copyright © 2005 - 2008 MaiCoo.com All Rights Reserved

违法和不良信息举报中心 本站服务器空间和带宽由雷克斯网络提供赞助
浙ICP备06017818号