【问题标题】:Validator Disappears on PostBack Inside Composite Control验证器在复合控件内的 PostBack 上消失
【发布时间】:2009-07-20 21:48:33
【问题描述】:

这应该是一个很容易解决的问题,因为它使用了与我解决 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

【问题讨论】:

  • 在调试中,是否会在 PostBack 上调用 CreateChildControls?

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


【解决方案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

【讨论】:

    猜你喜欢
    • 2012-03-09
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多