2011-07-06 5 views
1

사용자 지정 서버 컨트롤을 만들었습니다. 지금까지이 컨트롤은 웹 페이지에서 일부 HTML을 렌더링합니다. 페이지를 제출할 때 서버 컨트롤의 텍스트 상자에 입력 된 값을 가져와 일부 웹 서비스를 호출하여 사용자의 입력을 확인해야합니다. 이 코드가이 컨트롤이 사용되는 페이지의 코드 뒤에 작성하고 싶지 않습니다. 모든 유효성 검사를 서버 컨트롤 자체에 쓰고 유효성 검사에 실패하면 Page.IsValid를 false로 설정해야합니다. 서버 컨트롤의 사용자 입력 값이 유효한 경우 Page.IsValid가 true입니다.Page.IsValid를 사용하여 사용자 지정 컨트롤 컨트롤 유효성 검사를 통합합니다.

나는 Google recaptcha와 동일한 기능을 달성하려고합니다. 모든 사용자가이 컨트롤을 사용하려면 페이지의 컨트롤을 사용해야합니다. 사용자가 입력 한 값이 올 바르거나 틀린 것은 컨트롤 자체에서 처리되며 페이지 뒤의 코드에서는 Page.IsValid 만 있습니다. 다음은이

http://code.google.com/apis/recaptcha/docs/aspnet.html

을 설명 구글의 페이지이며, 나 또한 구글의 reCAPTCHA를 사용하고 예상대로 작동합니다. 또한 가능한 경우 내 서버 컨트롤에 대해 동일한 종류의 기능을 구축하고 싶습니다.

답변

1

감사합니다. 해결책을 찾았습니다. 다음은 서버 컨트롤의 전체 코드입니다. 트릭은 IValidator를 구현하는 것이 었습니다. 그것은 우리에게 두 개의 재산과 하나의 대도시를줍니다. ErrorMessage 및 IsValid 속성과 Validate 메서드 Validate 메서드에 모든 유효성 검사 코드를 작성하고 this.IsValid를 설정했습니다. 이것은 문제를 해결했습니다.

[ToolboxData("<{0}:MyControl runat=server></{0}:MyControl>")] 
public class MyControl : WebControl, IValidator 
{ 
    protected override void RenderContents(HtmlTextWriter output) 
    { 
     //Render the required html 
    } 

    protected override void Render(HtmlTextWriter writer) 
    { 
     this.RenderContents(writer); 
    } 

    protected override void OnInit(EventArgs e) 
    { 
     Page.Validators.Add(this); 
     base.OnInit(e); 
    } 

    public string ErrorMessage 
    { 
     get; 
     set; 
    } 

    public bool IsValid 
    { 
     get; 
     set; 
    } 

    public void Validate() 
    { 
     string code = Context.Request["txtCode"]; 
     this.IsValid = Validate(code);//this method calls the webservice and returns true or false 
     if (!this.IsValid) 
     { 
      ErrorMessage = "Invalid Code"; 
     } 
    } 
} 
0

서버 컨트롤에 유효성 검사기를 통합 할 수 있습니다. 웹 서비스를 호출하려면 서버 유효성 검사 메소드가 필요합니다.

결과적으로 페이지에 드롭하는 서버 컨트롤이되며 다른 유효성 검사기는 필요하지 않습니다. 컨트롤에서 내용을 확인할 수없는 경우 page.isvalid는 false가됩니다.

사이먼

+0

simon, 내 서버 컨트롤은 서버 쪽 컨트롤을 렌더링하지 않습니다. 그것은 단지 HTML 텍스트 상자와 일부 숨겨진 필드를 렌더링합니다. 요청 변수를 사용하여 사용자 입력을 가져온 다음 유효성을 검사합니다. 조금 더 자세히 설명해 주시겠습니까? – nccsbim071

+0

당신의 솔루션은 내가 제안한 것이지만, 서버 컨트롤을 사용하지 않는 것이 더 나은 해결책 일 것입니다. –

관련 문제