2009-07-17 22 views
1

これは、FooControl(下記)で最後の問題を修正したのと同じ方法を使用するので、修正するのは簡単な問題です。Validatorがコンポジットコントロール内のPostBackで消える

基本的に、私はこの複合コントロールに派生したバリデーターを追加したいと思います。それはうまくいきますが、ポストバックでマークアップ内に消えるだけで、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

+0

はい、それはポストバックで壊れます。 – kamranicus

答えて

1

私はこの問題を発見しました。どうやら、PostBackでは、どのようにバリデータの作成を注文しても、その表示はNoneに設定されています。 Renderメソッドを壊してValidator変数をチェックすることでこれを発見しました。

解決策(ハック?)は、レンダリング中に、バリデータを目的のディスプレイに設定することです。

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) 
     Validator.Display = ValidatorDisplay.Dynamic 
     MyBase.Render(writer) 
    End Sub 
関連する問題