ASP CustomValidator, advancing to postback after error
I have an ASP .NET page with ASP validators (Required Field, Regular Expression,...) plus java script functions for a开发者_如何学Godditional validation (for example, to check if second date bigger than first date, among others).
I usually do:
<script type="text/javascript">
function validate() {
// ...
alert('Not valid!');
return false;
}
</script>
<asp:Button ID="Button1" runat="server" Text="Add"
OnClientClick="return validate();" OnClick="Button1_Click" />
So, the button advances to the postback if the asp and the javascript validation both pass, and it works fine.
I’m trying out the custom validator:
<asp:CustomValidator ID="CustomValidator1"
EnableClientScript="true" runat="server" ControlToValidate="TextBox1"
ClientValidationFunction="validate();" >
</asp:CustomValidator>
(also tried with ClientValidationFunction="return validate();")
But the page is continuously advancing to the postback, even after showing the “not valid” alert... Any thoughts? Thanks!
When using a CustomValidator, the client side validation function needs to accept a source and an arguments parameter. Then, to mark the validation as failed, you set arguments.IsValid
to false. Here is the MSDN page for the CustomValidator.
function validate(source, arguments) {
// ...
alert('Not valid!');
arguments.IsValid=false;
}
like @Jason wrote, when using CustomValidator client is excepting for source and arguments params. a quick sample of use both client and server side with CustomValidator.
CustomValidator use ClientValidationFunction and OnServerValidate properties:
<asp:CustomValidator ID="cvCreditCard" runat="server" ErrorMessage="Error Message" ControlToValidate="txtCardNumber" ClientValidationFunction="Validators.CardNumber" OnServerValidate="ValidateCreditCardValid">*</asp:CustomValidator>
Client side validation:
var Validators = {
CardNumber: function (source, clientside_arguments) {
var valid_val = true;
var txtCardNumber = clientside_arguments.Value; //(return the ControlToValidate value)
//make your checks here
clientside_arguments.IsValid = valid_val;
}}
server side validation:
protected void ValidateCreditCardValid(object sender, ServerValidateEventArgs e)
{
//make your checks here
e.IsValid = false;
}
I solved this problem by creating a variable:
Boolean fieldIsValid = true;
and in the custom validating expression method I would change the value if arguments weren't true:
if(args.IsValid == false)
{
fieldIsValid = false;
}
else
{
fieldIsValid = true;
}
Then, I also put that in the submit click method:
protected void submit_Click(object sender, EventArgs e)
{
if (fieldIsValid)
{
//submit my things
}
}
精彩评论