2009-07-17 6 views
1

Dies sollte ein einfaches Problem sein, da es die gleiche Art und Weise verwendet, wie ich mein letztes Problem mit FooControl (unten) behoben habe.Validator verschwindet auf PostBack Inside Composite Control

Grundsätzlich möchte ich einen abgeleiteten Validator hinzufügen, den ich zu diesem zusammengesetzten Steuerelement gemacht habe. Es funktioniert gut, aber beim Postback verschwindet es einfach im Markup und lässt mich denken, dass es seinen ViewState verloren hat.

Ich mache wahrscheinlich etwas falsch mit der Instantiierung, aber ich habe versucht, nur die ControlToValidate, Dinge bewegen, und nichts funktioniert.

Ich habe einige Umgebungscode zur Verfügung gestellt, um zu sehen, was funktioniert und was nicht.

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

Wird beim Debuggen die CreateChildControls auf PostBack aufgerufen? – BigBlondeViking

+0

Ja, es bricht PostBack. – kamranicus

Antwort

1

Ich habe das Problem gefunden. Anscheinend, auf PostBack, egal wie Sie die Erstellung des Validators bestellen, wird seine Anzeige auf None gesetzt. Ich habe das gefunden, indem ich die Render-Methode unterbrochen und die Validator-Variable überprüft habe.

Die Lösung (Hack?) Ist, während der Render-Methode den Validator auf die gewünschte Anzeige zu setzen.

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