我也遇到了这个问题。是的,在
CustomValidator
触发之前,所有其他验证器都必须通过。
但是,如果这对您不起作用,则可能需要使用
Page.Validate()
强制验证
您特定的验证组。
这就是我所做的,我仍然设有
RequiredFieldValidator
,而且不需要
ValidateEmptyText="true"
。
在文本框中添加一个陷阱以强制进行验证。
<asp:TextBox ID="txtLeft" runat="server" Width="110px" TextMode="SingleLine" style="text-align:center" OnTextChanged="TextBoxChanged_DateTimeTest" AutoPostBack="True" ValidationGroup="vg2"></asp:TextBox>
请注意,我正在使用一个特定的“验证组”“vg2”,因为我有其他区域不想进行验证。
另外,我想要验证日期和时间!
还需要两件事。TextBoxChanged_DateTimeTest方法...
protected void TextBoxChanged_DateTimeTest(object sender, EventArgs e)
{
Page.Validate("vg2");
if (!Page.IsValid)
{
TextBox tb1 = (TextBox)sender;
IFormatProvider culture = new CultureInfo("en-AU", true);
String[] formats = { "dd MM yyyy HH:mm", "dd/MM/yyyy HH:mm", "dd-MM-yyyy HH:mm" };
DateTime dt1;
DateTime.TryParseExact(tb1.Text, formats, culture, DateTimeStyles.AdjustToUniversal, out dt1);
if (dt1.ToShortDateString() != "1/01/0001")
tb1.Text = dt1.ToShortDateString() + " " + dt1.ToShortTimeString();
else
tb1.Text = DateTime.Today.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();
}
}
您还需要为CustomValidator
进行服务器端验证。在我的情况下,文本框必须接受日期和时间!
以下是标记...
<asp:CustomValidator ID="CustomValidator3" runat="server" ControlToValidate="txtLeft" ErrorMessage="Invalid date & time format (dd/MM/yyyy HH:mm)"
SetFocusOnError="true" ValidationGroup="vg2" OnServerValidate="CustomValidator_DateTime"></asp:CustomValidator>
下面是这段代码的实现...
protected void TextBoxChanged_DateTimeTest(object sender, EventArgs e)
{
Page.Validate("vg2");
if (!Page.IsValid)
{
TextBox tb1 = (TextBox)sender;
IFormatProvider culture = new CultureInfo("en-AU", true);
String[] formats = { "dd MM yyyy HH:mm", "dd/MM/yyyy HH:mm", "dd-MM-yyyy HH:mm" };
DateTime dt1;
DateTime.TryParseExact(tb1.Text, formats, culture, DateTimeStyles.AdjustToUniversal, out dt1);
if (dt1.ToShortDateString() != "1/01/0001")
tb1.Text = dt1.ToShortDateString() + " " + dt1.ToShortTimeString();
else
tb1.Text = DateTime.Today.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();
}
}
祝你好运!
Page.Validate()
和/或cusCustom.Validate()
。然后逐步执行并观察它是否被触发。我有一种感觉事件没有注册,尽管从你的代码看起来像是注册了。顺便问一下,这是哪个版本的ASP.NET? - Justin Morgan