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 变量发现了这一点。

解决方案(hack?)是在 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 回答