I am adding a custom validator to the page programmatically on click of a button, then validating the page and checking the IsValid property of the page. but the IsValid property is always returning true. Please help. here is the code. I need to add custom validator dynamically to show validation messages from business object. I am setting the IsValid property of the custom validator to false, so I expect the IsValid property of the Page to return false as well after validation. can’t understand what I am doing wrong here.
protected void Button1_Click(object sender, EventArgs e)
{
var validator = new CustomValidator();
validator.IsValid = false;
validator.ErrorMessage = "The input is invalid";
validator.ValidationGroup = "vgCustom";
Page.Validators.Add(validator);
ValidationSummary1.ValidationGroup = "vgCustom";
Page.Validate("vgCustom");
Label1.Text = Page.IsValid ? "The Page is valid" : "The Page is Invalid";
}
and here is the HTML mark-up
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ValidationSummary ID="ValidationSummary1" runat="server"/>
<asp:Button ID="Button1" runat="server" Text="Validate" OnClick="Button1_Click" />
<asp:Label ID="Label1" runat="server"></asp:Label>
</div>
</form>
</body>
</html>
BaseValidator.Validate Method:
So
validator.IsValidis being reset to its default value (True) when you callPage.Validate("vgCustom"). Whereas with the ServerValidateEventHandler, your code is setting IsValid onPage.Validate("vgCustom")instead of letting it be reset to the default. If you movevalidator.IsValid = falseto after the call toPage.Validate("vgCustom"), the page should fail to validate as expected.I prefer to use the following pattern though: