Il y a un certain nombre de choses que vous faites qui ne sont pas nécessaires et qui causent probablement vos problèmes.
Ce sont:
- Il n'y a pas besoin de stocker l'objet de contrôle de la session.Le contrôle lui-même doit utiliser ViewState et l'état de session pour stocker les informations requises, et non l'instance entière.
- Vous ne devriez pas vérifier PostBack lors de la création du contrôle. Il doit être créé à chaque fois pour permettre à ViewState de fonctionner et à l'événement d'être câblé.
- Les contrôles chargés après le chargement de ViewState ont souvent du mal à fonctionner correctement; évitez donc de charger le produit pendant l'événement Chargement de page, dans la mesure du possible.
Ce code fonctionne pour moi:
Default.aspx
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="Test_User_Control._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server"><title></title></head>
<body>
<form id="form1" runat="server">
<asp:PlaceHolder ID="PlaceHolder1" runat="server" />
</form>
</body>
</html>
Default.aspx.vb
Partial Public Class _Default
Inherits System.Web.UI.Page
Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
Dim control As Control = LoadControl("~/UserControl1.ascx")
PlaceHolder1.Controls.Add(control)
End Sub
End Class
UserControl1.ascx
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="UserControl1.ascx.vb" Inherits="Test_User_Control.UserControl1" %>
<asp:Label ID="Label1" Text="Before Button Press" runat="server" />
<asp:Button ID="Button1" Text="Push me" runat="server" />
UserControl1.ascx.vb
Public Partial Class UserControl1
Inherits System.Web.UI.UserControl
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Label1.Text = "The button has been pressed!"
End Sub
End Class
Point accepté pour le préfixe hongrois, gardez cela à l'esprit pour l'avenir. Je vais coller le code complet dans un commentaire ci-dessous. J'apprécierais vos commentaires –