随笔 - 103  文章 - 0 评论 - 370 trackbacks - 35
<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

☆ 有些事現在不做,就一輩子都不會做了 ☆

与我联系

搜索

 

常用链接

留言簿

我参加的小组

我的标签

随笔分类

随笔档案

部落格

最新评论

阅读排行榜

评论排行榜

摘要
一般在注册客户端指令码都是使用 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 对象。


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

 1Imports System.Web.UI
 2
 3''' <summary>
 4''' 客户端指令码管理。
 5''' </summary>

 6Public Class TBScriptManager
 7    Private FPage As System.Web.UI.Page
 8
 9    ''' <summary>
10    ''' 建构函式。
11    ''' </summary>
12    ''' <param name="Page">Page 物件。</param>

13    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(ByVal Key As StringByVal Script As StringOptional 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(ByVal Key As StringByVal Script As StringOptional 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(ByVal Key As StringByVal 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(ByVal Key As StringByVal 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(ByVal Control As Control, ByVal Argument As String, _
62        Optional ByVal RegisterForEventValidation As Boolean = FalseAs 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(ByVal Options As PostBackOptions, _
72        Optional ByVal RegisterForEventValidation As Boolean = FalseAs 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(ByVal Control As Control, ByVal Argument As String, _
83        ByVal RegisterForEventValidation As BooleanAs 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 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() 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() 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
posted on 2008-05-25 11:07 jeff377 阅读(1984) 评论(4)  编辑 收藏 网摘

FeedBack:
#1楼 2008-05-25 16:58 BoyLee      
http://www.cnblogs.com/Emoticons/baimantou/105104147.gif" alt="" />vb.net
  回复  引用  查看    
#2楼 2008-08-01 09:17 落木      
TBScriptManager中是如何添加ScriptManager引用,这个问题我始终没搞懂,好像在类中只能使用ClientScriptManager吧,能不能给我说明一下呢,
  回复  引用  查看    
#3楼[楼主] 2008-08-01 09:37 jeff377      
@落木
那是參考 ASP.NET AJAX 的組件,所以在 TBScriptManager 類別中才可以使用 ScriptManager

  回复  引用  查看    
#4楼 2008-12-03 18:56 u[未注册用户]
--引用--------------------------------------------------
BoyLee: <img src="http://www.cnblogs.com/Emoticons/baimantou/105104147.gif" alt="" />vb.net

-------------------------------------------------------<html>-

  回复  引用    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1206842




相关文章:

相关链接: