2012-10-16 4 views
1

유효성 검사에 익숙하지 않고 유효성 검사를 위해 간단한 웹 폼을 작성했습니다. 여기서는 BaseValidator 클래스의 AppCode 폴더에서 EvaluateIsValid() 메서드를 재정의합니다. 이 메서드에서는 오류 개체가 개체의 인스턴스에this.GetControlValidationValue() 호출시 문자열을 설정하려면 설정되어 있지 않습니다.사용자 지정 유효성 검사 개체가 인스턴스로 설정되지 않았습니다.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ValidApp.Default" %> 

<!DOCTYPE html> 

<script runat="server"> 
    protected void pageCvd_ServerValidate(object source, ServerValidateEventArgs args) 
    { 
     ValidApp.App_Code._Validators valid = new ValidApp.App_Code._Validators(usernameTxt.ClientID.ToString()); 
    } 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div style="display:inline-block; width:200px;"> 
     <asp:CustomValidator ID="pageValidatorCvd" runat="server" EnableClientScript="false" OnServerValidate="pageCvd_ServerValidate"></asp:CustomValidator>  
     <asp:Label ID="usernameLbl" runat="server" Text="Username:" style="width:50px; font-size:xx-small"></asp:Label> 
     <asp:TextBox ID="usernameTxt" runat="server" style="width:100px; font-size:xx-small"></asp:TextBox> 
     <br /> 
     <asp:Label ID="passwordLbl" runat="server" Text="Password:" style="width:50px; font-size:xx-small"></asp:Label> 
     <asp:TextBox ID="passwordTxt" runat="server" style="width:100px; font-size:xx-small"></asp:TextBox> 
    </div> 
    <div> 
     <asp:Button ID="registryBtn" runat="server" OnCommand="registryBtn_Command" CommandName="" CommandArgument="" Text="Register" style="width:50px; font-size:xx-small"/> 
    </div> 
    </form> 
</body> 
</html> 

코드

namespace ValidApp.App_Code { public class _Validators : BaseValidator { private string regex; private string errorMessage; private string controlToValidate; protected override bool EvaluateIsValid() { string value = this.GetControlValidationValue(controlToValidate); return Regex.IsMatch(value, regex); } public _Validators(string controlToValidate = "", string regex = @"^[a-z0-9]{6-8}$", string errorMessage = "The Username is not valid!") { this.regex = regex; this.errorMessage = errorMessage; this.controlToValidate = controlToValidate; bool validation = EvaluateIsValid(); } } } 


뒤에 나는 <%@ Register >에 있지만 아무 소용이 내 자신의 사용자 정의 유효성 검사를 만들기 위해 노력했다.

내가 잘못 가고있는 아이디어가 있습니까?

+0

'controlToValidate'가 적절한 값으로 설정되어 있는지 디버깅 해 봤습니까? 나는 당신의 생성자에 null이 어떻게 든 넘겨지고 있다고 의심한다. webcontrols가 매개 변수화 된 생성자를 가질 수 있다고 생각하지 않습니다. – CodingGorilla

+0

예, 올바른 컨트롤을 보냅니다. 그것은 얻지 못하는 커스텀 밸리데이터 컨트롤입니다! – DaNet

답변

0

이 솔루션은 :

그것은 당신이 클래스 생성자에 전화를 걸 수없는 것 같다, 그런 식으로 EvaluateIsValid() 방법 자체에 명중하고, 오른쪽 제어를 얻을 수 있습니다!

namespace ValidApp.App_Code 
{ 
    public class _Validators : BaseValidator 
    { 
     protected override bool EvaluateIsValid() 
     { 
      string value = this.GetControlValidationValue(ControlToValidate); 
      return Regex.IsMatch(value, @"^[a-z0-9]{6-8}$"); 
     } 

     public _Validators() 
     { 

     } 
    } 
} 

그리고 그게 전부입니다!