Asp.net 按钮是否可以验证更多验证组?

Asp.net 按钮是否可以验证更多验证组?,asp.net,validation,Asp.net,Validation,我有3种类型的验证器: 它是“VG1”验证组的一部分 它是“VG2”验证组的一部分 它不是任何验证组的一部分 我有两个按钮,B1和B2 我想验证B1。单击“当且仅当所有第一个和第三个类型的验证程序都成功验证了与它们关联的控件时” 我想验证B2。单击“当且仅当第二和第三种类型的所有验证器都成功验证了与之关联的控件时” 这在ASP.NET中是可能的吗?如果是这样的话,你能告诉我如何做到这一点,或者我在哪里可以读到一些能在这个问题上启发我的东西 编辑: 但是,如果VG1无效,那么消息将消失,因为验证了

我有3种类型的验证器:

  • 它是“VG1”验证组的一部分

  • 它是“VG2”验证组的一部分

  • 它不是任何验证组的一部分

  • 我有两个按钮,B1和B2


    我想验证B1。单击“当且仅当所有第一个和第三个类型的验证程序都成功验证了与它们关联的控件时”

    我想验证B2。单击“当且仅当第二和第三种类型的所有验证器都成功验证了与之关联的控件时”

    这在ASP.NET中是可能的吗?如果是这样的话,你能告诉我如何做到这一点,或者我在哪里可以读到一些能在这个问题上启发我的东西

    编辑:

    但是,如果VG1无效,那么消息将消失,因为验证了空组。是否有显示所有验证错误消息的解决方案?多谢各位

    编辑2:

        function isValidSaveAsClosed()
        {
            Page_ClientValidate("");
            Page_ClientValidate("VG1");
            var groups = [];
            groups[0] = undefined;
            groups[1] = "VG1";
            var valid = true;
            for (var f in Page_Validators)
            {
                if (jQuery.inArray(Page_Validators[f].validationGroup, groups) >= 0)
                {
                    ValidatorValidate(Page_Validators[f]);
                    valid = valid && Page_Validators[f].isvalid;
                }
            }
    
            return valid;
        }
    

    上面的函数解决了我的问题。

    是一个按钮可以验证多个验证组

    在按钮内单击,您可以按以下方式验证组:

        Page.Validate("VG1");
        Page.Validate("VG2");
    
        if (Page.IsValid)
        {
    
             // Page is valid  so proceed..!!
    
        }
    
    
    函数验证()
    {
    var isValid=false;
    isValid=Page_ClientValidate('VG1');
    如果(有效)
    {
    isValid=Page_ClientValidate('VG2');
    }
    返回有效;
    }
    

    试试这个……希望它能有所帮助。

    您可以使用
    Page\u ClientValidate(validationgroup)
    函数验证验证组

    你可以试试

    <asp:Button ID="B1" runat="server" Text="Button" 
         OnClientClick="return Validate('VG1') && Validate() " />
    
    <asp:Button ID="B2" runat="server" Text="Button" 
         OnClientClick="return Validate('VG2') && Validate() " />
    

    这是一篇老文章,但我最近遇到了同样的问题,我解决问题的方法如下所述

    您可以将本文中给出的代码复制到ASP.Net网站项目中,然后自己测试。与其他两个按钮不同,第一个按钮(即左侧的按钮)同时验证三个验证组

    只需在下面的代码中包含aspx页面末尾给出的JavaScript,我在其中重写了验证函数
    IsValidationGroupMatch
    ,以便可以验证多个组。然后,如果要在客户端验证多个组,则必须调用函数
    Page\u ClientValidate(“group1,group2,group6,group5”)
    ,只需将逗号分隔的验证组列表传递给该函数即可

    (注意:但请记住,通过使用此方法,您只能在客户端验证多个验证组。这不会自动在服务器端验证多个组。您必须在客户端调用
    Page\u ClientValidate
    的API函数,因为ASP.Ne不会自动连接多个组验证。)(t框架)

    允许在客户端同时验证多个组的aspx页面代码示例

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="MultipleValidationGroupsByOneButton.aspx.cs" Inherits="MultipleValidationGroupsByOneButton" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                TextBox1 : 
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="TextBox1 needs input" ControlToValidate="TextBox1" ForeColor="Red" ValidationGroup="group1"></asp:RequiredFieldValidator>
    
                <br />
                <br />
                TextBox2 : 
                <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="TextBox2 needs input" ControlToValidate="TextBox2" ForeColor="Red" ValidationGroup="group2"></asp:RequiredFieldValidator>
                <br />
                <br />
                 TextBox3 :
                 <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="TextBox3 needs input" ControlToValidate="TextBox3" ForeColor="Red" ValidationGroup="group3"></asp:RequiredFieldValidator>
    
                <br />
                <br />
            </div>
            <asp:Button ID="btnMultipleValidationGroups" runat="server" Text="Validate group1 and group2"  onclientclick="if(!Page_ClientValidate('group1,group2,group3')) { return false;}" />
            <asp:Button ID="btnGroup1" runat="server" Text="Validate only group1" ValidationGroup="group1" />
            <asp:Button ID="btnGroup2" runat="server" Text="Validate only group2" ValidationGroup="group2" />
            <script type="text/javascript">
                window["IsValidationGroupMatch"] = function (control, validationGroup) {
                    if ((typeof (validationGroup) == "undefined") || (validationGroup == null)) {
                        return true;
                    }
                    var controlGroup = "";
                    var isGroupContained = false;
                    if (typeof (control.validationGroup) == "string") {
                        controlGroup = control.validationGroup;
                        var controlGroupArray = [];
                        if (validationGroup.indexOf(",") > -1) {
                            controlGroupArray = validationGroup.split(",");
                        }
                        for (var i = 0; i < controlGroupArray.length; i++) {
                            if (controlGroupArray[i].trim() == controlGroup.trim()) {
                                isGroupContained = true;
                            }
                        }
                    }
                    return (controlGroup == validationGroup || isGroupContained);
                }
            </script>
        </form>
    </body>
    </html>
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class MultipleValidationGroupsByOneButton : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //always call this method in Page Load event for each button with multiple validation groups
            HookupValidationForMultipleValidationGroups(btnMultipleValidationGroups);
        }
        //the method below will automatically hook up a button with multiple validation groups for client-side validation
        private void HookupValidationForMultipleValidationGroups(IButtonControl button)
        {
         if (!Page.IsPostBack && button.ValidationGroup.Contains(","))
         {
            //hook up validation on client-side by emitting the appropriate javascript for onclick  event of the button with multiple validation groups
            PostBackOptions myPostBackOptions = new PostBackOptions((WebControl)button);
            myPostBackOptions.ActionUrl = string.Empty;
            myPostBackOptions.AutoPostBack = false;
            myPostBackOptions.RequiresJavaScriptProtocol = true;
            myPostBackOptions.PerformValidation = true;//THIS true value hooks up the client-side validation
            myPostBackOptions.ClientSubmit = true;
            myPostBackOptions.ValidationGroup = button.ValidationGroup;
    
            // Add postback script so cleint-side validation is automatically hooked up for control with multiple validation groups
            ((WebControl)button).Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(myPostBackOptions));
         }
        }
        //Override default Validate method so server-side validation of buttons with multiple validation groups occurs automatically 
        public override void Validate(string validationGroup)
        {
            if (validationGroup.Contains(","))
            {
                string[] validationGroups = validationGroup.Split(",".ToCharArray());
                foreach (string group in validationGroups)
                {
                    Page.Validate(group);
                }
            }
            base.Validate(validationGroup);
        }
        protected void btnMultipleValidationGroups_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                lblMessage.Text = "Button with multiple validation groups was clicked";
            }
        }
        protected void btnGroup1_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                lblMessage.Text = "Button with Group1 validation group was clicked";
            }
        }
        protected void btnGroup2_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                lblMessage.Text = "Button with Group2 validation group was clicked";
            }
        }
    
    }
    
    
    文本框1:
    

    文本框2:

    文本框3:

    窗口[“IsValidationGroupMatch”]=函数(控件,validationGroup){ if((typeof(validationGroup)=“未定义”)| |(validationGroup==null)){ 返回true; } var controlGroup=“”; var isGroupContained=false; if(typeof(control.validationGroup)=“string”){ controlGroup=control.validationGroup; var controlGroupArray=[]; if(validationGroup.indexOf(“,”>-1){ controlGroupArray=validationGroup.split(“,”); } 对于(var i=0;i
    我正在添加另一个答案,因为添加到我的上一个现有答案会使答案太大,任何人都无法阅读

    在这个答案中,我对我的上一个答案进行了扩展,以便在客户端和服务器端自动连接多个验证组。
    。这意味着您不需要调用
    Page\u ClientValidate(“group1,group2”)
    在JavaScript中单击按钮的事件,因为它将自动发生。此外,多个组的服务器端验证也将自动发生

    下面给出了这方面的标记和代码。您可以尝试我提供的aspx代码,并在网站项目中进行测试。若要测试是否发生自动服务器端验证,必须为三个验证器中的每一个设置
    EnableClientScript=“false”

    多组自动验证方法说明

    如果要实现多个验证组,则需要在aspx页面中执行以下步骤。如果需要一次验证多个组,请确保在标记中提及按钮控件的
    ValidationGroup
    属性的以逗号分隔的验证组列表

  • 您需要通过将JavaScript添加到aspx页面的末尾来覆盖JavaScriptmethod
    IsValidationGroupMatch
    (此覆盖的代码在下面的标记代码末尾给出,您可以将其复制/粘贴到aspx页面中);这是ASP.Net验证框架提供的标准方法
  • 您需要将按钮与多个验证组连接起来进行客户端验证,因为这不是由ASP.Net自动完成的;为此,您必须在ea页面加载事件的代码隐藏中调用方法
    HookupValidationForMultipleValidationGroups
    <asp:Button ID="B1" runat="server" Text="Button" 
         OnClientClick="return Validate('VG1') && Validate() " />
    
    <asp:Button ID="B2" runat="server" Text="Button" 
         OnClientClick="return Validate('VG2') && Validate() " />
    
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="MultipleValidationGroupsByOneButton.aspx.cs" Inherits="MultipleValidationGroupsByOneButton" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                TextBox1 : 
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="TextBox1 needs input" ControlToValidate="TextBox1" ForeColor="Red" ValidationGroup="group1"></asp:RequiredFieldValidator>
    
                <br />
                <br />
                TextBox2 : 
                <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="TextBox2 needs input" ControlToValidate="TextBox2" ForeColor="Red" ValidationGroup="group2"></asp:RequiredFieldValidator>
                <br />
                <br />
                 TextBox3 :
                 <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="TextBox3 needs input" ControlToValidate="TextBox3" ForeColor="Red" ValidationGroup="group3"></asp:RequiredFieldValidator>
    
                <br />
                <br />
            </div>
            <asp:Button ID="btnMultipleValidationGroups" runat="server" Text="Validate group1 and group2"  onclientclick="if(!Page_ClientValidate('group1,group2,group3')) { return false;}" />
            <asp:Button ID="btnGroup1" runat="server" Text="Validate only group1" ValidationGroup="group1" />
            <asp:Button ID="btnGroup2" runat="server" Text="Validate only group2" ValidationGroup="group2" />
            <script type="text/javascript">
                window["IsValidationGroupMatch"] = function (control, validationGroup) {
                    if ((typeof (validationGroup) == "undefined") || (validationGroup == null)) {
                        return true;
                    }
                    var controlGroup = "";
                    var isGroupContained = false;
                    if (typeof (control.validationGroup) == "string") {
                        controlGroup = control.validationGroup;
                        var controlGroupArray = [];
                        if (validationGroup.indexOf(",") > -1) {
                            controlGroupArray = validationGroup.split(",");
                        }
                        for (var i = 0; i < controlGroupArray.length; i++) {
                            if (controlGroupArray[i].trim() == controlGroup.trim()) {
                                isGroupContained = true;
                            }
                        }
                    }
                    return (controlGroup == validationGroup || isGroupContained);
                }
            </script>
        </form>
    </body>
    </html>
    
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="MultipleValidationGroupsByOneButton.aspx.cs" Inherits="MultipleValidationGroupsByOneButton" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                TextBox1 : 
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="TextBox1 needs input"  ControlToValidate="TextBox1" ForeColor="Red" ValidationGroup="group1"></asp:RequiredFieldValidator>
    
                <br />
                <br />
                TextBox2 : 
                <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="TextBox2 needs input"  ControlToValidate="TextBox2" ForeColor="Red" ValidationGroup="group2"></asp:RequiredFieldValidator>
                <br />
                <br />
                TextBox3 :
                 <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="TextBox3 needs input"  ControlToValidate="TextBox3" ForeColor="Red" ValidationGroup="group3"></asp:RequiredFieldValidator>
    
                <br />
                <br />
            </div>
            <asp:Button ID="btnMultipleValidationGroups" runat="server" Text="Validate group1 and group2" ValidationGroup="group1,group2" OnClick="btnMultipleValidationGroups_Click" />
            <asp:Button ID="btnGroup1" runat="server" Text="Validate only group1" ValidationGroup="group1" OnClick="btnGroup1_Click" />
            <asp:Button ID="btnGroup2" runat="server" Text="Validate only group2" ValidationGroup="group2" OnClick="btnGroup2_Click" />
            <asp:Label ID="lblMessage" runat="server" ForeColor="Red" Font-Bold="true"></asp:Label>
            <script type="text/javascript">
                window["IsValidationGroupMatch"] = function (control, validationGroup) {
                    if ((typeof (validationGroup) == "undefined") || (validationGroup == null)) {
                        return true;
                    }
                    var controlGroup = "";
                    var isGroupContained = false;
                    if (typeof (control.validationGroup) == "string") {
                        controlGroup = control.validationGroup;
                        var controlGroupArray = [];
                        if (validationGroup.indexOf(",") > -1) {
                            controlGroupArray = validationGroup.split(",");// validationGroup.split(",");
                        }
                        for (var i = 0; i < controlGroupArray.length; i++) {
                            if (controlGroupArray[i].trim() == controlGroup.trim()) {
                                isGroupContained = true;
                            }
                        }
                    }
                    return (controlGroup == validationGroup || isGroupContained);
                }
            </script>
        </form>
    </body>
    </html>
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class MultipleValidationGroupsByOneButton : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //always call this method in Page Load event for each button with multiple validation groups
            HookupValidationForMultipleValidationGroups(btnMultipleValidationGroups);
        }
        //the method below will automatically hook up a button with multiple validation groups for client-side validation
        private void HookupValidationForMultipleValidationGroups(IButtonControl button)
        {
         if (!Page.IsPostBack && button.ValidationGroup.Contains(","))
         {
            //hook up validation on client-side by emitting the appropriate javascript for onclick  event of the button with multiple validation groups
            PostBackOptions myPostBackOptions = new PostBackOptions((WebControl)button);
            myPostBackOptions.ActionUrl = string.Empty;
            myPostBackOptions.AutoPostBack = false;
            myPostBackOptions.RequiresJavaScriptProtocol = true;
            myPostBackOptions.PerformValidation = true;//THIS true value hooks up the client-side validation
            myPostBackOptions.ClientSubmit = true;
            myPostBackOptions.ValidationGroup = button.ValidationGroup;
    
            // Add postback script so cleint-side validation is automatically hooked up for control with multiple validation groups
            ((WebControl)button).Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(myPostBackOptions));
         }
        }
        //Override default Validate method so server-side validation of buttons with multiple validation groups occurs automatically 
        public override void Validate(string validationGroup)
        {
            if (validationGroup.Contains(","))
            {
                string[] validationGroups = validationGroup.Split(",".ToCharArray());
                foreach (string group in validationGroups)
                {
                    Page.Validate(group);
                }
            }
            base.Validate(validationGroup);
        }
        protected void btnMultipleValidationGroups_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                lblMessage.Text = "Button with multiple validation groups was clicked";
            }
        }
        protected void btnGroup1_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                lblMessage.Text = "Button with Group1 validation group was clicked";
            }
        }
        protected void btnGroup2_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                lblMessage.Text = "Button with Group2 validation group was clicked";
            }
        }
    
    }
    
    <div>
        <asp:TextBox ID="txt1" runat="server" placeholder="field1" />
        <asp:RequiredFieldValidator runat="server" ID="req1a" ControlToValidate="txt1" ValidationGroup="group1" Display="Dynamic" />
        <asp:RequiredFieldValidator runat="server" ID="req1b" ControlToValidate="txt1" Display="Dynamic" />
    </div>
    <div>
        <asp:TextBox ID="txt2" runat="server" placeholder="field2" />
        <asp:RequiredFieldValidator runat="server" ID="req2" ControlToValidate="txt2" />
    </div>
    <!-- Validate validators with empty ValidationGroup -->
    <asp:Button runat="server" ID="btn1" Text="Validate All" />
    <!-- Validate group1 validators -->
    <asp:Button runat="server" ID="btb2" Text="Validate Group 1" ValidationGroup="group1"/>