但是,如果不爲你工作,那麼你可能需要強制使用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>
請注意,我用的是特定ValidationGroup
「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);
//if page is not valid, then validate the date here and default it to today's date & time,
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);
//if page is not valid, then validate the date here and default it to today's date & time,
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();
}
}
祝你好運!
我總是有服務器端驗證器的問題,我總是最終與客戶端:( – jonezy
我也很想知道這個答案 – jonezy
該方法是否解僱?是否將它設置爲驗證器的OnServerValidate事件?你能告訴我們驗證器的ASPX標記嗎? –