简体   繁体   English

asp.net验证控制禁止按钮单击事件

[英]asp.net validation controls inhibiting button click event

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. 好的,两天后仍然会出现问题..我有一个asp.net表单,包含几个文本字段,一个下拉列表和一个注册按钮。

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). 问题:当我将客户端验证器应用于文本字段并下拉时,按钮单击事件被禁止(对于页面上的所有按钮;不仅用于提交按钮,还用于从MasterPage继承的全局导航按钮)。 Some fields have more than one validator (eg required field and reg ex). 某些字段具有多个验证器(例如,必填字段和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 (ie no matter how many validators I have on the page, it will only work with ANY one of them commented out). 我似乎是一个疯狂的工作,插入一个额外的不需要的'虚拟'验证器只是为了评论,但它似乎只与n-1验证器一起工作(即无论我在页面上有多少验证器,它只适用于任何其中一人评论说出来)。

There are links all over the web to an article about this exact topic on aspalliance.com but sadly, the link is broken. 网上有链接到aspalliance.com上关于这个确切主题的文章但遗憾的是,链接已被破坏。 Can anybody please suggest a solution? 有人可以建议一个解决方案吗?

Thanks, Daf. 谢谢,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>

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 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. 或者确保不应该触发验证的所有其他按钮都将CausesValidation属性设置为False。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM