2009-07-17 4 views
1

Cela devrait être un problème simple à résoudre, car il utilise la même manière que j'ai résolu mon dernier problème avec FooControl (ci-dessous). Fondamentalement, je veux ajouter un validateur dérivé que j'ai fait à ce contrôle composite. Cela fonctionne très bien mais en postback il disparaît juste dans le balisage, me faisant penser qu'il a perdu son ViewState. Je fais probablement quelque chose de mal avec l'instanciation, mais j'ai essayé de ne régler que ControlToValidate, de déplacer les choses, et rien ne fonctionne.Validator disparaît sur le contrôle composite PostBack Inside

J'ai fourni du code pour voir ce qui fonctionne et ce qui ne fonctionne pas.

Private FooControl As IFooControl 
    Private Validator As MyValidator 

    Protected Overrides Sub CreateChildControls() 

     FooControl = FooControlProvider.CreateFooControl(blah) 

     Me.Controls.Add(FooControl.RetrieveControl())    

     ' Begin Not Working 

     Validator = New MyValidator() 
     Me.Controls.Add(Validator) 

     Validator.ID = "MyValidatorID" 
     Validator.ControlToValidate = FooControl.ID 
     Validator.IsRequired = True ' Custom property 
     Validator.ErrorMessage = "Please select an answer" 

     ' End Not Working 

     If Not DataSource Is Nothing Then 
      FooControlProvider.AssignDataSource(DataSource, FooControl) 
     End If 
    End Sub 
+0

Dans le débogage, les CreateChildControls sont-ils appelés sur PostBack? – BigBlondeViking

+0

Oui, il casse sur PostBack. – kamranicus

Répondre

1

J'ai trouvé le problème. Apparemment, sur PostBack, peu importe comment vous commandez la création du Validateur, son affichage est défini sur Aucun. J'ai trouvé ceci en cassant sur la méthode de Render et en vérifiant la variable Validator.

La solution (hack?) Consiste à définir le validateur sur l'affichage souhaité pendant la méthode Render.

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) 
     Validator.Display = ValidatorDisplay.Dynamic 
     MyBase.Render(writer) 
    End Sub 
Questions connexes