2012-04-04 3 views
0

나는 다음과 같은 문제에 직면 해 거의 2 일 동안 싸웠습니다. 다음 코드가 있습니다.Validator.RenderControl은 빈 문자열을 반환합니다.

 protected override void Render(HtmlTextWriter writer) 
    { 
     string controlOutput; 
     string validatorOutput; 
     string allOutput; 
     StringWriter controlStringWriter = new StringWriter(); 
     HtmlTextWriter controlHtmlWriter = new HtmlTextWriter(controlStringWriter); 

     StringWriter validatorsStringWriter = new StringWriter(); 
     HtmlTextWriter validatorsHtmlWriter = new HtmlTextWriter(validatorsStringWriter); 

     base.Render(controlHtmlWriter); 
     controlOutput = controlStringWriter.ToString(); 

     this.renderValidators(validatorsHtmlWriter); 
     validatorOutput = validatorsStringWriter.ToString(); 

     allOutput = String.Format("{0} {1}", controlOutput, validatorOutput); 
     writer.Write(allOutput); 
    } 

renderValidators 기능은 다음과 같습니다

private void renderValidators(HtmlTextWriter writer) 
     { 
      foreach (BaseValidator validator in this.ValidatorsCollection) 
      { 
       validator.RenderControl(writer); 
      } 
     } 

렌더 기능은 빈 문자열을 반환합니다. 컬렉션에있는 유효성 검사기의 Visible 속성이 true로 설정됩니다.

나는 유효성 검사기를 OnInit 함수에 추가하고 있습니다. 최초 렌더링시 validator.RenderControl (writer); 다시 게시 후 html 입력을 반환하기 시작한 빈 문자열 반환 ...

어쩌면 누군가가 그런 문제에 직면 했습니까 ???

답변

1

내 이해를 위해 컨트롤이 유효성 검사기를 렌더링하기 전에 페이지에 추가되었는지 확인해야합니다.

 Page page = Page; 
     if (page == null || page.Request == null) { 
      return false; 
     } 

매우 유용한 예는 MSDN

에서 찾을 수있다
관련 문제