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
4

1 に答える 1

1

問題を見つけました。どうやら、PostBackでは、Validatorの作成をどのように注文しても、その表示はNoneに設定されます。これは、Renderメソッドを中断し、Validator変数をチェックすることで見つかりました。

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

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
        Validator.Display = ValidatorDisplay.Dynamic
        MyBase.Render(writer)
    End Sub
于 2009-07-20T13:48:33.813 に答える