I have following code with a RequiredFieldValidator
. The EnableClientScript
property is set as "false" in the validation control. Also I have disabled script in browser.
I am NOT using Page.IsValid
in the code behind. Still, when I submit without any value in textbox I will get error message
.
From comments of @Dai, I came to know that this can be an issue, if there is any code in Page_Load
that is executed in a postback
. There will be no validation errors thrown.
(However, for button click handler, there is no need to check Page.IsValid
)
if (Page.IsPostBack) { string value = txtEmpName.Text; txtEmpName.Text = value + "Appended"; }
QUESTION
Page_Load
?Page.IsValid
?Page.IsValid
; but something that says what are the mandatory scenarios to use Page.IsValid
UPDATE 1
Refer ASP.NET Validators Common Misconception
Page.IsValid
is accessible only after runningPage.Validate()
method which is invoked implicitly somewhere afterPage_Load
. In case you keep all of your logic in a Page_Load event handler (which is highly discouraged!), call thePage.Validate()
before checking thePage.IsValid
.
Note: It is advised not to keep all the logic in Page_Load
. If something is to happen on button click event, move it to button click event handler. If something is to happen on drop-down event, move it to drop-down selected item change event handler.
UPDATE 2
It seems like, we need to add If(Page.IsValid)
in button click
also if we are using a Custom Validator
with server side validation. Refer CustomValidator not working well.
Note: Client side validation question is present here: Whether to use Page_IsValid or Page_ClientValidate() (for Client Side Events)
MARKUP
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script type="text/javascript"> alert('haiii'); </script> </head> <body> <form id="form1" runat="server"> <div> <asp:ValidationSummary runat="server" ID="vsumAll" DisplayMode="BulletList" CssClass="validationsummary" ValidationGroup="ButtonClick" /> <asp:TextBox ID="txtEmpName" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="valEmpName" runat="server" ControlToValidate="txtEmpName" EnableClientScript="false" ErrorMessage="RequiredFieldValidator" Text="*" Display="Dynamic" ValidationGroup="ButtonClick"></asp:RequiredFieldValidator> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" ValidationGroup="ButtonClick" /> </div> </form> </body> </html>
CODE BEHIND
protected void Button1_Click(object sender, EventArgs e) { string value = txtEmpName.Text; SubmitEmployee(value); }
References:
Page.IsValid is a property to check whether page validation succeeded or not. The Page. Validate() method is fired automatically by controls that have the CausesValidation property set to true. Note that the Button control's CausesValidation property is true by default.
Validating a website is the process of ensuring that the pages on the website conform to the norms or standards defined by various organizations.
Once your validation routine finishes, use the IsValid property to indicate whether the value specified by the Value property passed validation. This value determines whether the input control associated with the CustomValidator control passed validation.
Validation occurs after Page_Load
, but before event handlers (See http://msdn.microsoft.com/en-us/library/ms178472(v=VS.100).aspx).
If your button does not cause validation, you must manually fire Page.Validate.
You may not interrogate Page.IsValid
until after (1) you have called Page.Validate
or (2) a control that causes validation was the source of/included in a postback.
If you require validation to occur before event handlers fire, you may use:
if (Page.IsPostback) { Page.Validate( /*Control Validation Group Name Optional*/ ); if (Page.IsValid) { //Do some cool stuff } }
You may also want to consider redesigning so you aren't required to do so.
In an event handler that handles a control which causes validation, Page.IsValid
is guaranteed to be available. In all other cases, it is generally safer to re-request validation. One model for handling submissions on a form that has validators:
void btnSubmit_Click(object sender, EventArgs e) { this.UpdateGUIWithSubmitRequest(); if (Page.IsValid) { this.ProcessSuccessfulSubmission(); } else { this.ProcessInvalidSubmission(); } }
If you are using a CustomValidator
that has a very expensive validation step, you may consider caching the result in the HttpResponse.Cache
so you do not have to re-validate if multiple calls to Page.Validate occur.
void CustomValidator_ServerValidate(object source, ServerValidateEventArgs args) { CustomValidator self = (CustomValidator)source; string validatorResultKey = self.ClientID; bool? validatorResult = Context.Items[validatorResultKey] as bool?; if (validatorResult.HasValue) { args.IsValid = validatorResult.Value; return; } bool isValid = this.DoSomethingVeryTimeConsumingOrExpensive(); Context.Items[validatorResultKey] = isValid; args.IsValid = isValid; }
This, of course, depends 100% on your architecture and whether or not you are able to assume that a passed/failed validation during initial validation still passes/fails during subsequent validations of the same Page Life Cycle.
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