2012-10-16 41 views
1

我剛剛接受驗證,並且已經創建了一個簡單的Web表單,我試圖驗證它,其中我重寫了App_Code文件夾中BaseValidator類的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() 
     { 

     } 
    } 
} 

這就是它的全部!

相關問題