1

検証は初めてで、検証しようとしている単純なWebフォームを作成しました。ここで、App_CodeフォルダーEvaluateIsValid()のクラスのメソッドをオーバーライドします。BaseValidatorこのメソッドでは、文字列を設定するための呼び出しで、オブジェクトがオブジェクトのインスタンスに設定されていないというエラーが発生します。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 >たが、役に立ちませんでした。

私が間違っているアイデアはありますか?

4

1 に答える 1

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()
        {

        }
    }
}

そして、それがすべてです!

于 2012-10-25T18:39:16.817 に答える