代码之家  ›  专栏  ›  技术社区  ›  kamranicus

复合控件内的验证程序在回发时消失

  •  1
  • kamranicus  · 技术社区  · 17 年前

    这应该是一个简单的问题来解决,因为它使用了与我上次修复FooControl问题相同的方法(如下)。

    基本上,我想向这个复合控件添加一个派生的验证器。它工作得很好,但在回发时它只是消失在标记中,让我觉得它失去了ViewState。

    我可能在实例化它时做了一些错误的事情,但我尝试只将控件设置为Validate,四处移动,但没有任何效果。

    我已经提供了一些周围的代码来查看哪些是有效的,哪些是无效的。

        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 回复  |  直到 17 年前
        1
  •  1
  •   kamranicus    17 年前

    我发现了问题所在。显然,在回发时,无论您如何安排验证程序的创建,其显示都设置为“无”。我通过中断Render方法并检查Validator变量发现了这一点。

        Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
            Validator.Display = ValidatorDisplay.Dynamic
            MyBase.Render(writer)
        End Sub
    
    推荐文章