Required field validator not working

Srivastava picture Srivastava · Nov 1, 2010 · Viewed 30.6k times · Source

I have used a required field validator followed by a regular expression validator but the required field validator is not working.....

<asp:TextBox ID="txtSummary" runat="server" TextMode="MultiLine" Width="700px"
    CssClass="txtStyle" Font-Names="Arial" MaxLength="1000" 
    ValidationGroup="Valtxt" TabIndex="2" Rows="4">
</asp:TextBox>

<asp:RegularExpressionValidator ID="regValSummary" runat="server"
    ControlToValidate="txtSummary" Display="Dynamic"
    ValidationExpression="[^&lt;&gt;&amp;#!]*" ValidationGroup="Valtxt">
        Invalid characters(&lt;&gt;&amp;#!) are not allowed
</asp:RegularExpressionValidator>

<asp:RequiredFieldValidator ID="reqvalSummary" runat="server"
    ControlToValidate="txtSummary" ErrorMessage="Summary is required"
    ValidationGroup="Valtxt" Display="Dynamic">
</asp:RequiredFieldValidator>

can anyone sees the problem???

Answer

Ahmad Mageed picture Ahmad Mageed · Nov 1, 2010

The RequiredFieldValidator is triggered by the client side onchange event. It sounds like you're expecting it to be triggered by the onblur event, such that tabbing away from the textbox would fire the validation.

Before jumping to that, I suspect this is what you are seeing and to validate that it's actually working you need to trigger onchange. To do so, enter some text in the textbox, tab away, tab back to it, clear the textbox, then tab away once more. You should now see the RequiredFieldValidator's error message since it's contents have changed.

Back to the onblur issue. To accomplish that behavior you could add the onblur attribute in your code-behind and have it call the ValidatorValidate(...) JavaScript method as follows:

void Page_Load(object sender, EventArgs e)
{
    txtSummary.Attributes.Add("onblur", "ValidatorValidate(" + reqvalSummary.ClientID + ")");
}

Alternately, you could accomplish the same thing in markup. First, add this script block:

<script type="text/javascript">
    function rfvBlur() {
        var rfv = document.getElementById("<%= reqvalSummary.ClientID %>");
        ValidatorValidate(rfv);
    }    
</script>

Second, update the <asp:TextBox.../> markup by adding onblur="rfvBlur()" so that it now looks like this:

<asp:TextBox ID="txtSummary" runat="server" TextMode="MultiLine" Width="700px" CausesValidation="true"
            CssClass="txtStyle" Font-Names="Arial" MaxLength="1000" ValidationGroup="Valtxt"
            TabIndex="2" Rows="4" onblur="rfvBlur()" />

Yet another option is to validate the entire ValidationGroup by adding the following attribute to your <asp:TextBox.../> markup (no additional script block needed):

onblur="Page_ClientValidate('Valtxt')"