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
- Why does not the server side validation happen before
Page_Load
? - Why does it work fine when I use
Page.IsValid
? - Can you provide any reference to an article that explains this? (Not something that says - always use
Page.IsValid
; but something that says what are the mandatory scenarios to usePage.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:
- Should I always call Page.IsValid?
- ASP.NET Validation Controls – Important Points, Tips and Tricks
- CustomValidator not working well