S
shapper
Hello,
I am creating my own ScriptManager to add Javascript to my web sites,
including JQuery scripts.
When I add Ajax Script Manager to a page it behaves as a control in
Design View.
However Ajax Script Manager does not render any tag when the web site
is previewed.
My control renders as a span tag. Could someone help me out with this?
Any opinion about my control would be great.
Here is my code:
' ScriptManager
< _
DefaultProperty("ID"), _
Inherits WebControl
Implements INamingContainer
' Implementation ...
' OnInit
Protected Overloads Overrides Sub OnInit(ByVal e As EventArgs)
' Raise init event
MyBase.OnInit(e)
' Define page
Dim page As Page = Me.Page
' Check if page is defined
If page IsNot Nothing Then
' Check if an instance of ScriptManager already exists
If page.Items.Contains(GetType(ScriptManager)) Then
Throw New InvalidOperationException("Only one instance of a
ScriptManager can be added to the page.")
End If
' Add a reference to items collection, used by GetCurrent, for
easy reference to the control
page.Items(GetType(ScriptManager)) = Me
End If
' Add page event handlers
AddHandler page.Load, AddressOf Page_Load
End Sub ' OnInit
' OnPreRender
Protected Overloads Overrides Sub OnPreRender(ByVal e As
EventArgs)
' Raise OnLoad event
MyBase.OnLoad(e)
End Sub ' OnPreRender
' Properties ...
' Blocks
Private _Blocks As List(Of ScriptBlock)
< _
Bindable(True), _
Category("Script Manager"), _
DefaultValue(""), _
Description("A collection of script blocks to be added to the
page"), _
Localizable(True) _
Get
If _Blocks Is Nothing Then
_Blocks = New List(Of ScriptBlock)
End If
Return _Blocks
End Get
Set(ByVal value As List(Of ScriptBlock))
_Blocks = value
End Set
End Property ' Blocks
' JQuery
Private _JQuery As List(Of JQueryScript)
< _
Bindable(True), _
Category("Script Manager"), _
DefaultValue(""), _
Description("A collection of jQuery scripts to be added to the
page"), _
Localizable(True) _
Get
If _JQuery Is Nothing Then
_JQuery = New List(Of JQueryScript)
End If
Return _JQuery
End Get
Set(ByVal value As List(Of JQueryScript))
_JQuery = value
End Set
End Property ' JQuery
' References
Private _References As List(Of ScriptReference)
< _
Bindable(True), _
Category("Script Manager"), _
DefaultValue(""), _
Description("A collection of script references to be include on
the page"), _
Localizable(True) _
Get
If _References Is Nothing Then
_References = New List(Of ScriptReference)
End If
Return _References
End Get
Set(ByVal value As List(Of ScriptReference))
_References = value
End Set
End Property ' References
' Page_Load
Private Sub Page_Load(ByVal sender As Object, ByVal e As
EventArgs)
For Each reference In Me.References
If Not
Page.ClientScript.IsClientScriptIncludeRegistered(Me.GetType(),
reference.Name) Then
Page.ClientScript.RegisterClientScriptInclude(Me.GetType,
reference.Name, reference.Path)
End If
Next reference
For Each block In Me.Blocks
If Not
Page.ClientScript.IsClientScriptBlockRegistered(Me.GetType(),
block.Name) Then
Page.ClientScript.RegisterClientScriptBlock(Me.GetType,
block.Name, block.Script, True)
End If
Next block
Dim jquery As New StringBuilder
If _JQuery IsNot Nothing Then
jquery.AppendLine("$(document).ready(function(){")
For Each block As JQueryScript In _JQuery
jquery.AppendLine(block.Script)
Next block
jquery.AppendLine("});")
End If
Page.ClientScript.RegisterClientScriptBlock(Me.[GetType](),
"jQuery", jquery.ToString(), True)
End Sub ' Page_Load
' Methods ...
' GetCurrent
Public Shared Function GetCurrent(ByVal page As Page) As
ScriptManager
If page Is Nothing Then
Throw New ArgumentNullException("page")
End If
Dim manager As ScriptManager =
TryCast(page.Items(GetType(ScriptManager)), ScriptManager)
' Check if the page contains a script manager
If manager Is Nothing Then
Throw New InvalidOperationException("A ScriptManager is
required on the page.")
End If
Return manager
End Function ' GetCurrent
End Class ' ScriptManager
Thanks,
Miguel
I am creating my own ScriptManager to add Javascript to my web sites,
including JQuery scripts.
When I add Ajax Script Manager to a page it behaves as a control in
Design View.
However Ajax Script Manager does not render any tag when the web site
is previewed.
My control renders as a span tag. Could someone help me out with this?
Any opinion about my control would be great.
Here is my code:
' ScriptManager
< _
DefaultProperty("ID"), _
Public Class ScriptManagerToolboxData( said:
Inherits WebControl
Implements INamingContainer
' Implementation ...
' OnInit
Protected Overloads Overrides Sub OnInit(ByVal e As EventArgs)
' Raise init event
MyBase.OnInit(e)
' Define page
Dim page As Page = Me.Page
' Check if page is defined
If page IsNot Nothing Then
' Check if an instance of ScriptManager already exists
If page.Items.Contains(GetType(ScriptManager)) Then
Throw New InvalidOperationException("Only one instance of a
ScriptManager can be added to the page.")
End If
' Add a reference to items collection, used by GetCurrent, for
easy reference to the control
page.Items(GetType(ScriptManager)) = Me
End If
' Add page event handlers
AddHandler page.Load, AddressOf Page_Load
End Sub ' OnInit
' OnPreRender
Protected Overloads Overrides Sub OnPreRender(ByVal e As
EventArgs)
' Raise OnLoad event
MyBase.OnLoad(e)
End Sub ' OnPreRender
' Properties ...
' Blocks
Private _Blocks As List(Of ScriptBlock)
< _
Bindable(True), _
Category("Script Manager"), _
DefaultValue(""), _
Description("A collection of script blocks to be added to the
page"), _
Localizable(True) _
Public Property Blocks() As List(Of ScriptBlock)
Get
If _Blocks Is Nothing Then
_Blocks = New List(Of ScriptBlock)
End If
Return _Blocks
End Get
Set(ByVal value As List(Of ScriptBlock))
_Blocks = value
End Set
End Property ' Blocks
' JQuery
Private _JQuery As List(Of JQueryScript)
< _
Bindable(True), _
Category("Script Manager"), _
DefaultValue(""), _
Description("A collection of jQuery scripts to be added to the
page"), _
Localizable(True) _
Public Property JQuery() As List(Of JQueryScript)
Get
If _JQuery Is Nothing Then
_JQuery = New List(Of JQueryScript)
End If
Return _JQuery
End Get
Set(ByVal value As List(Of JQueryScript))
_JQuery = value
End Set
End Property ' JQuery
' References
Private _References As List(Of ScriptReference)
< _
Bindable(True), _
Category("Script Manager"), _
DefaultValue(""), _
Description("A collection of script references to be include on
the page"), _
Localizable(True) _
Public Property References() As List(Of ScriptReference)
Get
If _References Is Nothing Then
_References = New List(Of ScriptReference)
End If
Return _References
End Get
Set(ByVal value As List(Of ScriptReference))
_References = value
End Set
End Property ' References
' Page_Load
Private Sub Page_Load(ByVal sender As Object, ByVal e As
EventArgs)
For Each reference In Me.References
If Not
Page.ClientScript.IsClientScriptIncludeRegistered(Me.GetType(),
reference.Name) Then
Page.ClientScript.RegisterClientScriptInclude(Me.GetType,
reference.Name, reference.Path)
End If
Next reference
For Each block In Me.Blocks
If Not
Page.ClientScript.IsClientScriptBlockRegistered(Me.GetType(),
block.Name) Then
Page.ClientScript.RegisterClientScriptBlock(Me.GetType,
block.Name, block.Script, True)
End If
Next block
Dim jquery As New StringBuilder
If _JQuery IsNot Nothing Then
jquery.AppendLine("$(document).ready(function(){")
For Each block As JQueryScript In _JQuery
jquery.AppendLine(block.Script)
Next block
jquery.AppendLine("});")
End If
Page.ClientScript.RegisterClientScriptBlock(Me.[GetType](),
"jQuery", jquery.ToString(), True)
End Sub ' Page_Load
' Methods ...
' GetCurrent
Public Shared Function GetCurrent(ByVal page As Page) As
ScriptManager
If page Is Nothing Then
Throw New ArgumentNullException("page")
End If
Dim manager As ScriptManager =
TryCast(page.Items(GetType(ScriptManager)), ScriptManager)
' Check if the page contains a script manager
If manager Is Nothing Then
Throw New InvalidOperationException("A ScriptManager is
required on the page.")
End If
Return manager
End Function ' GetCurrent
End Class ' ScriptManager
Thanks,
Miguel