Problème de postdata à travers des onglets
Bonjour à tous,
Merci à ceux qui prendront le temps de me lire ;)
Voilà. Je travaille actuellement sur une page ASPX avec un composant de gestion d'onglets.
C'est un système tout bête, lorsque je clique sur le premier onglet s'affiche le contenu du premier onglet, quand je clique sur le deuxième, le contenu du 2eme. (le tout en JS) Un peu dans ce goût là : http://www.supportduweb.com/ftp/ybou...s/onglets.html
Mon souci vient de la partie LoadPostData des composants(textbox, ...) faisant partie de chaque onglet.
Lorsque mes textbox sont dans la page en standard sans onglet aucun problème, mais lorsque je les mets dans un onglet, le postData ne se fait plus...Les données postées ne mettent pas à jour les contrôles.
Voici le code de mon composant
Code:
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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
Imports System.Web.UI
Namespace WebControls.Common
<ParseChildren(True)> _
<PersistChildren(False)> _
Public Class Tab
Inherits CompositeControl
Implements INamingContainer
#Region "Attributs"
Private moOngletsList As BulletedList
Private moUpanContent As UpdatePanel
Private mnNumOngletActif As Byte
#End Region
#Region "Propriétés"
Private maOnglets As New List(Of Onglet)
<PersistenceMode(PersistenceMode.InnerProperty)> _
Public ReadOnly Property Onglets() As List(Of Onglet)
Get
Return maOnglets
End Get
End Property
#End Region
#Region "Evenements"
Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
EnsureChildControls()
mnNumOngletActif = 0
MyBase.OnInit(e)
End Sub
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
MyBase.OnLoad(e)
Dim loHlk As HyperLink
For Each loOnglet In Onglets
moUpanContent.ContentTemplateContainer.Controls.Add(loOnglet)
loHlk = New HyperLink() With {.Text = loOnglet.Title}
loHlk.Attributes.Add("PanID", loOnglet.ClientID)
moOngletsList.Controls.Add(loHlk)
Next
For i = 0 To Me.Onglets.Count - 1
If mnNumOngletActif <> i Then
Me.Onglets(i).Attributes.Add("style", "display: none")
End If
Next
End Sub
Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs)
MyBase.OnPreRender(e)
ScriptManager.RegisterClientScriptInclude( _
Me.Page _
, Me.Page.GetType _
, "onglet" _
, ResolveClientUrl("~/_Code/WebControl/Tab/Tab.js")
)
End Sub
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
ScriptManager.RegisterStartupScript( _
Me.Page _
, Me.Page.GetType() _
, "key" & Me.ClientID _
, "$(function() { $('#" & Me.ClientID & "').initTab(); });" _
, True
)
MyBase.Render(writer)
End Sub
#End Region
#Region "Méthodes"
Protected Overrides Sub CreateChildControls()
MyBase.CreateChildControls()
moOngletsList = New BulletedList() With {.CssClass = "tab"}
Me.Controls.Add(moOngletsList)
moUpanContent = New UpdatePanel() With {.ID = "upanOnglets", .ChildrenAsTriggers = False, .UpdateMode = UpdatePanelUpdateMode.Conditional}
moUpanContent.Attributes("style") = "clear:left"
Me.Controls.Add(moUpanContent)
Me.ChildControlsCreated = True
End Sub
#End Region
End Class
<ParseChildren(False)> _
<PersistChildren(True)> _
Public Class Onglet
Inherits CompositeControl
Private moPanContent As Panel
Private msTitle As String
Public Property Title() As String
Get
Return msTitle
End Get
Set(ByVal value As String)
msTitle = value
End Set
End Property
Protected Overrides Sub CreateChildControls()
MyBase.CreateChildControls()
Me.moPanContent = New Panel With {.CssClass = "tab-panel"}
Me.Controls.Add(Me.moPanContent)
End Sub
Protected Overrides Sub AddParsedSubObject(ByVal obj As Object)
EnsureChildControls()
moPanContent.Controls.Add(obj)
End Sub
End Class
End Namespace |
Au niveau de l'aspx, ça donne, en simplifié ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
<Tab ID="TabOnglets" runat="server">
<Onglets>
<Onglet Title="1er Onglet" runat="server">
<div>
<asp:TextBox ID="txtCommentaire" TextMode="MultiLine" Rows="8" runat="server" />
</div>
</Onglet>
<Onglet Title="2eme onglet" runat="server">
<div>
<asp:TextBox ID="txtCommentaire2" TextMode="MultiLine" Rows="8" runat="server" />
</div>
</Onglet>
</Onglets>
</Tab> |
En clair, lorsque je modifie la valeur de txtCommentaire que je fais un post, rien n'est mis à jour sur contrôle serveur alors que la valeur est bien postée...
Je pense qu'il doit manquer quelque chose sur les composant Tab et Onglet qui empêchent de reconstruire la bonne hiérarchie des contrôles et donc de mettre à jour la textbox. Mais alors quoi? ça me dépasse...
Si jamais quelqu'un voit de quoi il peut s'agir, il me sauve. :)