2012-04-06 4 views
0

저는 RadEditor (기본적으로 텍스트 영역)를 래핑하는 사용자 정의 서버 컨트롤이 있습니다. 나는 동적에 직접 CustomValidator를 추가하려고하지만 ''의 'ControlToValidate'속성에 의해 참조 제어 ID 'RadEditor1'을 찾기 위해 서버 컨트롤에 CustomValidator를 동적으로 생성합니다.

수 없습니다 초기 pageload

에이 오류가 계속.

내가 직접 CustomValidator를 만들 내 서버 컨트롤 내부에 사용하고 코드입니다 :

protected override void OnInit(EventArgs e) 
{ 
    var validator = new CustomValidator(); 
    validator.CssClass = "validator-error"; 
    validator.Display = ValidatorDisplay.Dynamic; 
    validator.ControlToValidate = this.ID; 
    validator.Text = "You've exceeded the maximum allowed length for this field"; 
    validator.ClientValidationFunction = "checkLength"; 

    this.Controls.Add(validator); 

    base.OnInit(e); 
} 
+0

를' RadEditor'? –

+0

네, 그렇습니다. 'public class RichTextEditor : RadEditor {}' – msigman

답변

1

문제는 ASP.NET이 서버 컨트롤의 중 검색 바람이 있도록 RadEditorINamingContainer 구현이다 컨트롤 RadEditor1에 대한 자식 물론 RadEditor1에는 자식 컨트롤 RadEditor1이 없기 때문에 성공하지 못했습니다.

내가 사용하는 트릭은 부모 컨트롤 자체를 의미하는 "." 같은 특별한 ID를 선택하는 것입니다 :

protected override Control FindControl(string id, int pathOffset) 
{ 
    return (id == ".") ? this : base.FindControl(id, pathOffset); 
} 

는 그 다음 ControlToValidate"."를 사용합니까 당신의 서버 컨트롤에서 파생

validator.ControlToValidate = "."; 
+0

브릴리언트. 완벽하게 일했습니다. – msigman

+2

상위를 참조하기 위해 ".."을 추가하십시오. 어느 날 유용 할 수도 있습니다. :) –