와 사용자 정의 DropDownList로 : 나는 이름 충돌을 피하기 싶었 기 때문에내가 DropDownList로에서 상속 사용자 지정 컨트롤을 만들어 DropDownList로에 대한 검증 지원을 추가하기 위해 노력하고있어 검증
가public class MyDropDown: DropDownList, INamingContainer
{
private const string ValidatorID = "Validator";
private RequiredFieldValidator _validator;
protected override ControlCollection CreateControlCollection()
{
return new ControlCollection(this);
}
protected override void CreateChildControls()
{
base.CreateChildControls();
Controls.Clear();
_validator = new RequiredFieldValidator
{
ID = String.Format("{0}_{1}", ID, ValidatorID),
ControlToValidate = ID,
InitialValue = String.Empty,
ErrorMessage = "*",
ForeColor = Color.Red
};
Controls.Add(_validator);
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
_validator.RenderControl(writer);
}
}
내 클래스는 하는 INamingContainer을 구현합니다. 불행하게도 나는 다음과 같은 예외가이 컨트롤을 사용하려고하면
의 'ControlToValidate'속성에 의해 참조 제어 ID 'MDD'을 (를) 찾을 수 없습니다 'MDD_Validator'
이가 beause 일어나고있다 INamingContainer FindControl (NamingContainerId)은 null을 반환합니다.
나는 다음과 같은 방법으로 하는 INamingContainer 구현 및 설정 유효성 검사기 ID를 제거하면 :
_validator.ID = String.Format("{0}_{1}", ID, ValidatorID);
모든 것이 잘 작동하고 컨테이너 명명 안에 있어야하는 것처럼 검사기에 지정된 ID가 동일합니다.
그러나이 작업을 수행하는 방법이 있습니까 WITH INamingContainer?
유효성을 검사 할 컨트롤을 설정할 때 ID'가'this.ClientID'를 사용하는 대신'의 ... – bleepzter
그것은 찾을 수 없습니다 여전히 컨트롤을 도움이되지 않았다, 단지이 시간이 된 ClientID 오류 메시지가 ID 대신 – trickst3r