2009-07-17 7 views
1

FooControl (아래)에서 마지막 문제를 해결 한 것과 같은 방식으로이 문제를 해결하는 것이 간단한 문제입니다.유효성 검사기가 포스트 백 (PostBack) 복합체 컨트롤에서 사라짐

기본적으로이 합성 컨트롤에 만든 파생 된 유효성 검사기를 추가하고 싶습니다. 그것은 잘 작동하지만 포스트 백에서는 마크 업에서 사라져서 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 
+0

디버깅시 CreateChildControls가 PostBack에서 호출 되나요? – BigBlondeViking

+0

예, PostBack에서 중단됩니다. – kamranicus

답변

1

문제점을 발견했습니다. 분명히 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 
관련 문제