针对两个不同条件的客户端验证

时间:2013-02-22 18:43:15

标签: asp.net

有两种方法可以使用内置验证器为两个不同的条件验证asp.net文本框的输入吗?文本框与日期选择器一起使用,目前我有这样的RegularExpressionValidator来验证:

<asp:TextBox ID="tbStartDate" runat="server" Width="100" CssClass="TextCompact">yyyy</asp:TextBox>
<asp:HyperLink ID="hlStartDate" runat="server" ImageUrl="~/Images/iconCalendar.gif"></asp:HyperLink><br />
<asp:RegularExpressionValidator ID="revStartDate" ControlToValidate="tbStartDate"
     CssClass="TextCompact" runat="server" ErrorMessage="* Invalid Date" ValidationExpression="^(\d{4})$" />
每次输入无效日期时都会触发

- 您可以使用日期选择器,也可以输入日期字符串。

所以问题是我只想验证文本框中是否有数据。如果文本框为空,我希望它在没有验证的情况下通过。

这是可能的还是需要自定义客户端验证?

谢谢, Risho。

更新

我决定编写自己的从BaseValidator类派生的验证器类并将其连接起来,但是我遇到编译器错误。

namespace Abcdefg1234
{
    public class Custom_Validator : BaseValidator
    {
        public Custom_Validator()
        {

        }

        protected override bool EvaluateIsValid()
        {
            String value = this.GetControlValidationValue(this.ControlToValidate);
            return ValidateControls(value.Trim());
        }

        public static bool ValidateControls(string value)
        {

            if(Regex.IsMatch(value, @"^(\d{4})$") == true)
                return true;
            else if(value == "")
                return true;
            else
                return false;
        }
    }
}

然后我包含了页面指令标记:

<%@ Register TagPrefix="Cv" Namespace="Abcdefg1234" TagName="CustomValidaitonX" %>

和实际标签:

Cv:Custom_Validator ID="cvtbStartDate" ControlToValidate="tbStartDate"                        runat="server" ErrorMessage="* Invalid Date" />

我收到了一个未知的服务器标签。有任何想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

在空文本框中触发的唯一内置验证器是RequiredFieldValidator。如果文本框为空,则与其关联的其他验证程序不会在表单提交时触发。

换句话说,如果您提交文本框仍为空,RegularExpressionValidator不会被解雇,您应该一如既往。您是否遇到过不同的行为?

ETA:您需要在Register页面指令中指定程序集名称,以便识别Custom_Validator。我不相信自定义控件需要标记名称。