Incompréhension au niveau du viewstate : HiddenField, Javascript et ModalPopupExtender
Bonjour,
Je pense que j’ai un souci de compréhension du cycle de mes pages et je serai heureux de comprendre ce que je manque et d’en apprendre encore un peu plus sur cette notion essentielle.
Voici le contexte et mon souci : nous travaillons sur une application Web en vb.net dans laquelle la plupart des écrans sont des contrôles utilisateurs chargés dans une masterpage.
Dans l’uc me posant un problème j’ai un modalpopupexetender ouvrant un panel sur le click d’un bouton. Jusque-là rien d’inquiétant.
Dans ce panel se trouve une GridView dont le click sur une ligne déclenche la fermeture de la modalPopup et un script javascipt qui enregistre la clé de la ligne cliquée dans un Hiddenfield et ouvre une autre popup (aspx cette fois) qui elle déclenche à sa fermeture un postback de la page initiale.
Mon problème est de récupérer la clé de la ligne de la gridview qui a été cliquée, dans le code Behind, lors de ce dernier postback et là je coince !
Lors de l’exécution du javascript, le hiddenfield est bien rempli, mais une fois dans le code behind, il n’y a plus rien dedans.
Remarque : Suite à plusieurs recherche sur le net, j’ai tenté d’utiliser un textbox en « display :none », après avoir lu qu’ils n’avaient pas le même comportement vis-à-vis des modifications effectuées du côté client, mais le résultat est identique.
En espérant avoir été assez précis et compréhensible pour obtenir votre aide, voici quelques extraits de mon code :
Dans l’ascx
Code:
1 2 3 4
| <AjaxToolkit:ModalPopupExtender runat="server" ID="mpeLiaisonSalle" PopupControlID="pnlLiaisonSalle" TargetControlID="lnkbtnLiaisonSalle"
CancelControlID="lnkbtnRetourLiaisonSalle" BackgroundCssClass="modal_background" />
<asp:HiddenField ID="hfSalleALier" runat="server" EnableViewState="true" /> |
Dans l’ascx.vb
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Ajout du javascript permettant denregistrer la clé de la ligne cliquée de la gridview dans le HiddenField « hfSalleALier »
Protected Sub gvListeSalles_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvListeSalles.RowDataBound
If (e.Row.RowType = DataControlRowType.DataRow) Then
e.Row.Attributes.Add("onclick", String.Format("javascript:document.getElementById('{0}').Value = {1};", hfSalleALier.ClientID, CType(e.Row.DataItem, DayPilot.Web.Ui.Resource).Value))
End If
End Sub
Gestion de lévènement click du bouton ouvrant la modalPopup
Private Sub ibtnAjouterMateriel_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs) Handles ibtnAjouterMateriel.Click
Dim script As String = String.Empty
script &= "popupPageRechercheRessource(800, 600, 'RechercheRessources', '" & hfNouvelleRessource.ClientID & "', '', '" & lnkValiderAjoutRessource.UniqueID & "',0,'','" & Ressource.ETypeRessource.Materiel & "'); return false; "
mpeLiaisonSalle.OnOkScript = script
mpeLiaisonSalle.OkControlID = "gvListeSalles"
ChargerListeSalles()
pnlLiaisonSalle.Visible = True
mpeLiaisonSalle.Show()
End Sub |
D'avance merci de vos commentaires et de votre aide.