1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Web.UI
Namespace CSLib.Web.UI
Public Class Page
Inherits System.Web.UI.Page
'Region ""Constructor""
Public Sub New()
AddHandler Me.Init, AddressOf Page_Init
End Sub
'End Region
'Region ""Property""
Private renderOnlyPage As Boolean = False
''' <summary>
''' if true, the page would render only ContentPlaceHolder
''' </summary>
Public Property RenderOnlyPage() As Boolean
Get
Return renderOnlyPage
End Get
Set
renderOnlyPage = value
End Set
End Property
Private renderOnlyOneContentPlaceHolder As String = String.Empty
Public Property RenderOnlyOneContentPlaceHolder() As String
Get
Return renderOnlyOneContentPlaceHolder
End Get
Set
renderOnlyOneContentPlaceHolder = value
End Set
End Property
'End Region
''' <summary>
''' List of ContentPlaceHolder
''' </summary>
Private _Control As New List(Of Control)()
Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)
If RenderOnlyPage Then
' parcours récursif sur tous les controles de la page
CheckContentPlaceHolderRecursive(Me)
' suppression de tous les controles de la page
' pour ensuite rajouter nos contentPlaceHolder
Me.Controls.Clear()
For Each c As Control In _Control
Me.Controls.Add(c)
Next
End If
End Sub
''' <summary>
''' fonction recursive, qui fouille dans les controles de la page pour trouver
''' un ContentPlaceHolder
''' </summary>
''' <param name="control"></param>
Private Sub CheckContentPlaceHolderRecursive(ByVal control As Control)
If TypeOf control Is System.Web.UI.WebControls.ContentPlaceHolder Then
If RenderOnlyOneContentPlaceHolder = String.Empty Then
_Control.Add(control)
ElseIf control.ID = RenderOnlyOneContentPlaceHolder Then
_Control.Add(control)
End If
ElseIf control.Controls.Count > 0 Then
For Each c As Control In control.Controls
CheckContentPlaceHolderRecursive(c)
Next
End If
End Sub
''' <summary>
''' Cette méthode déclenche un evenement, si un control ayant besoin d'une balise form
''' (c'est le cas des controles avec postback) est absent.
''' En surchargeant cette méthode on passe outre cette limitation.
''' </summary>
''' <param name="control"></param>
Public Overloads Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
If Not RenderOnlyPage Then
MyBase.VerifyRenderingInServerForm(control)
End If
End Sub
End Class
End Namespace |
Partager