2010-07-13 6 views
0

J'ai une application avec 24 formulaires différents. Ils ont des options de sécurité basées sur lesquelles les 5 boutons différents Submit, Approve, 2nd Approve, 3rd Approve, Reject etc. sont activés désactivés.L'accès à la propriété à l'intérieur du contrôle dynamique donne une exception de référence nulle

Maintenant, j'ai conçu un MainForm qui a tous les boutons et le code de sécurité pour eux. J'ai créé eachform comme un usercontrol et les charge dynamiquement selon la forme que l'utilisateur veut. Mon chargement fonctionne parfaitement bien. Je charge le contrôle et l'ajoute à l'espace réservé dans l'événement de chargement de page de la page principale.

Maintenant, lorsque l'utilisateur sélectionne le bouton Soumettre, je souhaite appeler la méthode Save à l'intérieur de la commande usercol du formulaire, car chaque formulaire aura un enregistrement séparé. Donc, quand j'essaye cet extrait de code, j'obtiens l'erreur de référence Null. Faites-moi savoir comment le résoudre.

Private UCDynamic As UserControl 

ensuite à la page événement Load-je utiliser ce code

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
If not Me.IsPostBack 
      UCDynamic = LoadControl("Controls/BkCode.ascx") 
      Me.PlaceHolderForm.Controls.Add(UCDynamic) 
End if 

Puis l'événement ButtonClick corrigerons Je le fais

Protected Sub Save_OnClick(ByVal sender As Object, ByVal e As EventArgs) 
    Save() 
End Sub 

Sub Save() 
    CType(Me.UCDynamic, controls_BkCode).Save() 
End Sub 

est où je reçois l'erreur de référence nulle coulée. Donc, après le retour, le contrôle n'existe plus sur la page. Toutes les idées seront grandement appréciées.

Merci.

Répondre

0

Salut Tim Merci pour votre aide. Mais Findcontrol ne fonctionne pas pour l'espace réservé. Bien que j'ai le viewstate activé pour l'espace réservé mais il ne détient pas le contrôle après les post-retours.

Enfin résolu ce problème en déplaçant mon code LoadControl sur Si n'est pas la publication. Donc, je charge le contrôle à chaque fois et le code à l'intérieur du contrôle prend en charge la logique des post-retours et les vues pour le contrôle.

0

Le protocole http est sans état, donc toutes les variables de serveur n'ont rien après la publication.

Avez-vous essayé de le trouver avec FindControl, il devrait être stocké dans le Viewstate de votre espace réservé?

DirectCast (Me.PlaceHolderForm.FindControl ("the_id_of_your_usercontrol"), controls_BkCode) .Save()