有两种方法可以使用内置验证器为两个不同的条件验证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" />
我收到了一个未知的服务器标签。有任何想法吗?感谢。
答案 0 :(得分:0)
在空文本框中触发的唯一内置验证器是RequiredFieldValidator
。如果文本框为空,则与其关联的其他验证程序不会在表单提交时触发。
换句话说,如果您提交文本框仍为空,RegularExpressionValidator
不会被解雇,您应该一如既往。您是否遇到过不同的行为?
ETA:您需要在Register页面指令中指定程序集名称,以便识别Custom_Validator
。我不相信自定义控件需要标记名称。