验证器在复合控件内的PostBack上消失

时间:2009-07-17 17:20:56

标签: asp.net vb.net validation composite-controls

这应该是一个简单的问题需要解决,因为它使用与我用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

1 个答案:

答案 0 :(得分: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