0

有没有办法使用内置验证器来验证 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})$" />

每次输入无效日期时都会触发 - 您可以使用日期选择器,也可以输入日期字符串。

所以问题是我只想验证文本框中是否有数据。如果文本框为空,我希望它无需验证即可通过。

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

谢谢,里修。

更新:

我决定编写自己的从 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" />

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

4

1 回答 1

0

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

换句话说,您应该没问题,RegularExpressionValidator如果您在文本框仍然为空的情况下提交,则不会触发。您是否遇到不同的行为?

ETA:您需要在注册页面指令中指定程序集名称Custom_Validator才能被识别。我不相信自定义控件需要标签名称。

于 2013-02-22T21:27:09.723 回答