C# – asp.net validation controls inhibiting button click event

asp.netc

OK, this is still causing problems two days later..
I have an asp.net form consisting of several text fields and a drop down list and a register button.

The problem:
When I apply client side validators to the text fields and drop down, the button click event is inhibited (for ALL buttons on page; not just for submit button but also for global navigation buttons inheriting from a MasterPage). Some fields have more than one validator (e.g. required field and reg ex).

When I comment out ANY of the validators, all buttons' click events function as expected.

I seems like a crazy work aroung to insert an extra unwanted 'dummy' validator just to comment out but it only seems to work with n-1 validators (i.e. no matter how many validators I have on the page, it will only work with ANY one of them commented out).

There are links all over the web to an article about this exact topic on aspalliance.com but sadly, the link is broken. Can anybody please suggest a solution?

Thanks, Daf.

UPDATED…Markup code as follows:

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/Admin.Master" AutoEventWireup="true" CodeBehind="RegisterUser.aspx.cs" Inherits="LectureQuestions.Interface.Admin.RegisterUser" %>
<asp:Content ID="Content1" ContentPlaceHolderID="PageTitle" runat="server">Register New User
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="TitleTxt" runat="server">Register New User
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server">
    <table ID="tblInputField" runat="server" width="100%" cellspacing="15">
            <tr>
                <td width="10%"></td>
                <td width="20%">First Name</td>
                <td width="60%">
                    <asp:TextBox ID="txtFirstName" runat="server" Width="98%"></asp:TextBox>
                </td>
                <td width="10%">
                    <asp:RequiredFieldValidator ID="txtFirstNameRequired" runat="server" Display="Dynamic"
                        ValidationGroup="InputValidate" ControlToValidate="txtFirstName" ErrorMessage="*" ForeColor="Red"></asp:RequiredFieldValidator>
                </td>
            </tr>
            <tr>
                <td width="10%"></td>
                <td width="20%">Last Name</td>
                <td width="60%">
                    <asp:TextBox ID="txtLastName" runat="server" Width="98%"></asp:TextBox>
                </td>
                <td width="10%">
                    <asp:RequiredFieldValidator ID="txtLastNameRequired" runat="server" Display="Dynamic"
                        ValidationGroup="InputValidate" ControlToValidate="txtLastName" ErrorMessage="*" ForeColor="Red"></asp:RequiredFieldValidator>
                </td>
            </tr>
            <tr>
                <td width="10%"></td>
                <td width="20%">E-mail</td>
                <td width="60%">
                    <asp:TextBox ID="txtEmail" runat="server" Width="98%"></asp:TextBox>
                </td>
                <td width="10%">
                    <asp:RequiredFieldValidator ID="txtEmailRequired" runat="server" Display="Dynamic"
                        ValidationGroup="InputValidate" ControlToValidate="txtEmail" ErrorMessage="*" ForeColor="Red"></asp:RequiredFieldValidator>
                    <asp:RegularExpressionValidator ID="txtEmailRx" runat="server" Display="Dynamic"
                        ValidationGroup="InputValidate" ControlToValidate="txtEmail" ErrorMessage="*" ForeColor="Red"
                        ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:RegularExpressionValidator>
                </td>
            </tr>
            <tr>
                <td width="10%"></td>
                <td width="20%">Phone</td>
                <td width="60%">
                    <asp:TextBox ID="txtPhone" runat="server" Width="98%"></asp:TextBox>
                </td>
                <td width="10%">
                    <asp:RequiredFieldValidator ID="txtPhoneRequired" runat="server" Display="Dynamic"
                        ValidationGroup="InputValidate" ControlToValidate="txtPhone" ErrorMessage="*" ForeColor="Red"></asp:RequiredFieldValidator>
                    <asp:RegularExpressionValidator ID="txtPhoneRx" runat="server" Display="Dynamic"
                        ValidationGroup="InputValidate" ControlToValidate="txtPhone" ErrorMessage="*" ForeColor="Red"
                        ValidationExpression="^[0]\d{1,2}[\s,-]\d{5,7}$"></asp:RegularExpressionValidator>
                    <!-- solve validation probs -->
                </td>
            </tr>
            <tr>
                <td width="10%"></td>
                <td width="20%">Password</td>
                <td width="60%">
                    <asp:TextBox ID="txtPassword" runat="server" Width="98%"></asp:TextBox>
                </td>
                <td width="10%">
                    <asp:RequiredFieldValidator ID="txtPasswordRequired" runat="server" Display="Dynamic"
                        ValidationGroup="InputValidate" ControlToValidate="txtPassword" ErrorMessage="*" ForeColor="Red"></asp:RequiredFieldValidator>
                </td>
            </tr>
            <tr>
                <td width="10%"></td>
                <td width="20%">User Type</td>
                <td width="60%">
                    <asp:DropDownList ID="txtUserType" runat="server" Width="99.5%">
                        <asp:ListItem></asp:ListItem>
                        <asp:ListItem>Student</asp:ListItem>
                        <asp:ListItem>Lecturer</asp:ListItem>
                        <asp:ListItem>Admin</asp:ListItem>
                    </asp:DropDownList>
                </td>
                <td width="10%">
                    <asp:RequiredFieldValidator ID="txtUserTypeRequired" runat="server" Display="Dynamic"
                        ValidationGroup="InputValidate" ControlToValidate="txtUserType" ErrorMessage="*" ForeColor="Red"></asp:RequiredFieldValidator>
                </td>
            </tr>
            <tr>
                <td width="10%"></td>
                <td width="20%">Course</td>
                <td width="60%">
                    <asp:DropDownList ID="txtCourse" runat="server" Width="99.5%">
                        </asp:DropDownList>
                </td>
                <td width="10%"></td>
            </tr>
        </table>

        <table ID="tblAllValidationMsg" runat="server" width="100%" cellspacing="5">
            <tr>
                <td width="10%"></td>
                <td width="80%" align="center">
                    <asp:Label id="allValidationMsg" runat="server" height="22px" ForeColor="Red"></asp:Label>
                </td>
                <td width="10%"></td>
            </tr>
        </table>

        <table ID="tblCommandButtons" runat="server" width="100%" cellspacing="10">
            <tr>
                <td width="25%"></td>
                <td width="25%" align="right">
                    <asp:Button class="navbutton" ID="btnRegister" runat="server" causevalidation="true"
                        ValidationGroup="InputValidate" Text="Register User" OnClick="btnRegister_Click" />
                </td>
                <td width="25%" align="left">
                    <asp:Button class="navbutton" ID="btnCancel" runat="server" causevalidation="false"
                        Text="Cancel" onclick="btnCancel_Click" />
                </td>
                <td width="25x%"></td>
            </tr>
        </table>
</asp:Content>

Best Answer

To me it seems that you will need to use validation groups to tie the controls with your submit button. http://weblogs.asp.net/scottgu/archive/2004/10/24/246945.aspx

Or ensure that all the other buttons that are not supposed to trigger validation have CausesValidation attribute set to False.