2009-07-17 64 views
1

這應該是一個簡單的問題來解決,因爲它使用了我用FooControl解決我最後一個問題的相同方法(見下文)。驗證器在複合控件內的回發消失

基本上,我想添加一個派生的驗證器,我做了這個複合控制。它工作正常,但在回發它只是消失在標記中,使我認爲它失去了它的ViewState。

我可能在實例化它時做了一些錯誤,但我試過只設置ControlToValidate,移動東西,沒有任何效果。

我提供了一些周圍的代碼,看看有什麼工作,然後什麼不是。

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

在調試中,CreateChildControls在PostBack上被調用嗎? – BigBlondeViking 2009-07-17 19:58:42

回答

1

我發現了這個問題。顯然,在PostBack上,無論您如何訂購Validator的創建,其顯示設置爲None。我通過打破Render方法並檢查Validator變量來發現這一點。

解決方案(hack?)是在渲染方法期間將驗證器設置爲所需的顯示。

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) 
     Validator.Display = ValidatorDisplay.Dynamic 
     MyBase.Render(writer) 
    End Sub 
相關問題