I have the following ASP page:
<asp:Content ID="Content2" ContentPlaceHolderID="ShellContent" runat="server">
<form runat="server" id="AddNewNoteForm" method="post"">
<fieldset id="NoteContainer">
<legend>Add New Note</legend>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
<div class="ctrlHolder">
<asp:Label ID="LabelNoteDate" runat="server" Text="Note Date"
AssociatedControlID="NoteDateTextBox"></asp:Label>
<asp:TextBox ID="NoteDateTextBox" runat="server" class="textInput"
CausesValidation="True" ></asp:TextBox>
<asp:CustomValidator
ID="CustomValidator1"
runat="server"
ErrorMessage="CustomValidator"
ControlToValidate="NoteDateTextBox"
OnServerValidate="CustomValidator1_ServerValidate"
Display="Dynamic"
>*</asp:CustomValidator>
</div>
<div class="ctrlHolder">
<asp:Label ID="LabelNoteText" AssociatedControlID="NoteTextTextBox" runat="server" Text="Note"></asp:Label>
<asp:TextBox ID="NoteTextTextBox" runat="server" Height="102px"
TextMode="MultiLine" class="textInput" ></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server"
ErrorMessage="Note Text is Required" ControlToValidate="NoteTextTextBox">*</asp:RequiredFieldValidator>
</div>
<div class="buttonHolder">
<asp:Button ID="OkButton" runat="server" Text="Add New Note"
CssClass="primaryAction" onclick="OkButton_Click"/>
<asp:HyperLink ID="HyperLink1" runat="server">Cancel</asp:HyperLink>
</div>
</fieldset>
</form>
</asp:Content>
and the following code behind for the CustomValidator1_ServerValidate() method:
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
if (string.IsNullOrEmpty(args.Value.Trim()))
{
args.IsValid = false;
CustomValidator1.ErrorMessage = "Note Date is Required!";
return;
}
DateTime testDate;
if (DateTime.TryParse(args.Value, out testDate))
{
args.IsValid = true;
CustomValidator1.ErrorMessage = "Invalid Date!";
}
}
It never seems to fail validation no matter what I put in the text box...
Should mention this is ASP.NET 2.0
When you are testing if the textbox is empty, use this ValidateEmptyText="true" on the CustomValidator.
Otherwise required field validation won't work.
In order to use a customvalidator, you also need a requiredfieldvalidator for that same control. Just put a requiredfieldvalidator for NoteDateTextBox and it should fire the customvalidator's server event for you.
To add to Dan's response, an alternative way of using a CustomValidator
is:
ControlToValidate
propertyOnServerValidate
method, reference the control you are validating instead of using ServerValidateEventArgs.Value
, e.g. <asp:ValidationSummary runat="server" DisplayMode="BulletList" ValidationGroup="form" />
<asp:TextBox runat="server" ID="_textbox"/>
<asp:CustomValidator runat="server"
ErrorMessage="Please enter the secret"
OnServerValidate="TextBoxValidate"
ValidationGroup="form"
Display="None"
EnableClientScript="false" />
<asp:button runat="server" OnClick="ButtonClick" Text="Press" />
protected void ButtonClick(object sender, EventArgs e)
{
Page.Validate();
if (Page.IsValid)
{
// Do something
}
}
protected void TextBoxValidate(object sender, ServerValidateEventArgs args)
{
args.IsValid = _textbox.Text == "secret";
}
I had a similar issue for which blank entries were not validated; putting it here because this is what I searched on.
My solution was the attribute: ValidateEmptyText="true"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With