Валидатор исчезает на PostBack внутри составного элемента управления - PullRequest
1 голос
/ 17 июля 2009

Это должна быть простая проблема, которую нужно исправить, так как она использует тот же способ, что и я исправил мою последнюю проблему с 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 Ответ

1 голос
/ 20 июля 2009

Я нашел проблему. Очевидно, что в PostBack, независимо от того, как вы заказываете создание Validator, его отображение установлено на None. Я нашел это, взломав метод Render и проверив переменную Validator.

Решение (хак?) Состоит в том, чтобы установить валидатор на желаемое отображение во время метода визуализации.

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