Javascript 具有相同验证组的asp.net RequiredFieldValidator不会同时启动

Javascript 具有相同验证组的asp.net RequiredFieldValidator不会同时启动,javascript,html,asp.net,.net,validation,Javascript,Html,Asp.net,.net,Validation,我有一个带有6-12个必需字段验证器的aspx usercontrol。当我使用与验证器相同的验证组单击submit按钮时,只有部分验证器显示错误消息,然后在更正这些错误消息后,我再次单击该按钮,其他验证器显示错误消息。这很令人困惑 下面是两个文本框(上下文中)的简化标记和绑定到验证组的按钮 <%-- PRODUCT DETAIL --------------------------------------------------- --%> <dl class="accord

我有一个带有6-12个必需字段验证器的aspx usercontrol。当我使用与验证器相同的验证组单击submit按钮时,只有部分验证器显示错误消息,然后在更正这些错误消息后,我再次单击该按钮,其他验证器显示错误消息。这很令人困惑

下面是两个文本框(上下文中)的简化标记和绑定到验证组的按钮

<%-- PRODUCT DETAIL --------------------------------------------------- --%>
<dl class="accordion" data-accordion="">
    <dd>
        <a href="#PanelProductDetail">Product Detail</a>
        <div id="PanelProductDetail" class="content active">
            <fieldset>
                <%--<legend>Product Detail</legend>--%>
                <div class="row">
                    <%-- NAME --------------------------------------------------- --%>
                    <div class="medium-4 small-12 columns">
                        <label>
                            Product Name  <small>Required</small>
                            <asp:TextBox id="tbName" type="text" placeholder="Product Name" runat="server" />
                            <asp:RequiredFieldValidator runat="server" ID="rfvName" ControlToValidate="tbName" 
                                Text="Please add a product Name" CssClass="error" ValidationGroup="AddProduct" 
                                display="Dynamic"  />
                        </label>
                    </div>
            </fieldset>
        </div>
    </dd>
</dl>


<%-- PRODUCT PRICING AND INVENTORY --------------------------------------------------- --%>
<dl class="accordion" data-accordion="">
    <dd>
        <a href="#PanelProductPricing">Product Pricing and Inventory</a>
        <div id="PanelProductPricing" class="content active">
            <fieldset>
                <div class="row">
                    <%-- PRICE ------------------------------------------%>
                    <div class="medium-4 small-12 columns collapse">
                        <div class="row collapse">
                            <label>Price  <small>Required</small></label>
                            <div class="small-2 columns">
                                <span class="prefix">$</span>
                            </div>
                            <div class="small-10 columns">
                                <asp:TextBox runat="server" ID="tbPrice" placeholder="Retail Price" />
                            </div>
                            <asp:RequiredFieldValidator runat="server" ID="rfvPrice" ControlToValidate="tbPrice" Display="Dynamic" 
                                Text="Please enter a price" CssClass="error" ValidationGroup="AddProduct" />
                            <asp:RegularExpressionValidator ID="rexvPrice" runat="server" ControlToValidate="tbPrice" Text="Invalid value for price"
                                ValidationExpression="^\$?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$" 
                                ValidationGroup="AddProduct" CssClass="error" 
                                display="Dynamic" />
                        </div>
                    </div>
                </div>
            </fieldset>
        </div>
    </dd>
</dl>

<div class="row">
    <div class="large-3 medium-4 small-6 columns">
        <asp:Button ID="btnSubmit" runat="server" Text="Add Product" CssClass="button postfix" CausesValidation="true" ValidationGroup="AddProduct" />
    </div>
</div>

需要产品名称
所需价格
$
发生了什么(摘要) 在本示例中,tbPrice在第一次单击按钮时会收到错误消息,只有在文本框中输入一个值,然后再次单击submit按钮时,tbName验证程序才会显示其错误

我试过的
  • 我想可能有JS冲突,所以我去掉了包装 手风琴式标记-这并没有解决它
  • 我尝试更改控件在标记中的显示顺序-否 帮助
  • 我尝试删除显示=动态-无帮助
  • 问题:
    有人能帮我弄清楚为什么只有一些验证器在第一次点击按钮时被调用,而其余的验证器在第一个验证器的错误修复后被调用。

    这并不奇怪

    简单的答案是:

    验证控制呈现流首先调用RequireFeldValidator,然后是范围验证程序,然后。。。。。。 因此,当您单击该按钮时,首先调用requirefieldvalidator

    您对一个输入字段使用了两个验证控件

     <asp:RequiredFieldValidator runat="server" ID="rfvPrice" ControlToValidate="tbPrice" Display="Dynamic" 
                                    Text="Please enter a price" CssClass="error" ValidationGroup="AddProduct" />
                                <asp:RegularExpressionValidator ID="rexvPrice" runat="server" ControlToValidate="tbPrice" Text="Invalid value for price"
                                    ValidationExpression="^\$?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$" 
                                    ValidationGroup="AddProduct" CssClass="error" 
                                    display="Dynamic" />
    

    答案是,如果一些验证器使用Display=“Dynamic”,而另一些则不使用,那么它们会在不同的时间进行验证。一旦我将Display=“Dynamic”放在所有同时启动的验证器中。

    您的描述是准确的,但它没有解决在不同时间启动同一类型验证器的问题。谢谢