【问题标题】:ASP.NET Update Panel - Required Field Validator fires for AutoPostBack DropDownList even though CausesValidation = falseASP.NET 更新面板 - AutoPostBack DropDownList 的必填字段验证器会触发,即使 CausesValidation = false
【发布时间】:2020-08-18 17:54:03
【问题描述】:

我遇到了一个问题,即当附加的下拉列表对更改进行部分回发时,屏幕上会闪烁必填字段验证器。

本质上,该页面是用户从第一个下拉列表中选择并填充第二个下拉列表的表单。然后他们从第二个下拉列表中选择。然后,当用户同时选择两者时,他们会点击提交按钮,这会验证两个下拉菜单。

两个下拉菜单都在提交按钮使用的验证组中。我已将 CausesValidation="false" 添加到下拉列表中,但验证器仍然闪烁。下面的示例代码...

<form id="form1" runat="server">

    <asp:ScriptManager ID="MyAppScriptManager" runat="server"
        EnablePartialRendering="true"
        EnableCdn="true" />

        <div class="chat">

                        <asp:UpdatePanel ID="NewBookingUpdatePanel" UpdateMode="Conditional" ChildrenAsTriggers="true" runat="server">
                            <ContentTemplate>

                                    <div id="FreelancerDiv" class="collapse show">
                                        <div class="card-body">
                                            <div class="form-group">
                                                <div class="input-group">
                                                    <asp:DropDownList ID="FreelancerDropDownList" runat="server" AutoPostBack="true"
                                                        CausesValidation="false"
                                                        class="custom-select form-control form-control-lg">
                                                        <asp:ListItem Value=" " Text="Choose the freelancer for your booking." />
                                                        <asp:ListItem Value="Good" Text="Good selection." />
                                                    </asp:DropDownList>
                                                </div>
                                                <asp:RequiredFieldValidator ID="FreelancerRequired" runat="server" Display="Dynamic"
                                                    ControlToValidate="FreelancerDropDownList"
                                                    ValidationGroup="RequestBookingValidationGroup"
                                                    ErrorMessage="&nbsp;Required&nbsp;"
                                                    CssClass="alert-danger" />
                                            </div>
                                        </div>
                                    </div>

                                 
                                    <div id="ServiceDiv" class="collapse show" runat="server">
                                        <div class="card-body">
                                            <div class="form-group">
                                                <div class="input-group">
                                                    <asp:DropDownList ID="ServiceDropDownList" runat="server" AutoPostBack="true"
                                                        CausesValidation="false"
                                                        class="custom-select form-control form-control-lg">
                                                        <asp:ListItem Value=" " Text="Choose the service for your booking." />
                                                        <asp:ListItem Value="Good" Text="Good selection." />
                                                    </asp:DropDownList>
                                                </div>
                                                <asp:RequiredFieldValidator ID="ServiceRequired" runat="server" Display="Dynamic"
                                                    ControlToValidate="ServiceDropDownList"
                                                    ValidationGroup="RequestBookingValidationGroup"
                                                    ErrorMessage="&nbsp;Required&nbsp;"
                                                    CssClass="alert-danger" />
                                            </div>
                                        </div>
                                    </div>
                               
                                <button id="RequestBooking" runat="server" class="btn btn-lg btn-primary btn-block" type="button" onserverclick="RequestBooking_Click" validationgroup="RequestBookingValidationGroup">
                                    Request Booking
                                </button>
                            </ContentTemplate>
                        </asp:UpdatePanel>

        </div>
</form>

【问题讨论】:

    标签: asp.net validation updatepanel


    【解决方案1】:

    您可以在回发(和/或标记或页面加载事件)中启用或禁用(启用=true 或启用=false)必填字段验证器。相信它默认为启用,这就是它被触发的原因。

    【讨论】:

    • 我认为您没有阅读过这个问题。 “然后,当用户选择了所有内容时,他们点击底部的提交按钮验证所有内容”。如果我只是禁用了验证器,那么提交按钮将不会验证
    • 我读过,一切都在验证中,听起来你不想让验证器在回发时验证?如果不是,您可以改写帖子以使我更好地理解它。
    • 正确,选择下拉列表,它作为部分帖子返回,验证器短暂闪烁,但它返回OK,验证器然后消失。我希望验证器仅在单击提交按钮时触发。
    • 按钮点击事件应该类似于: Page.Validate("RequestBookingValidationGroup"); if(Page.IsValid){ // 点击这里的代码 }
    【解决方案2】:

    @JobesK 感谢提供帮助的 Enabled=false 提示 :)

    我在标记中禁用了验证器,然后在提交按钮中的 javascript 中启用了它们...

                    ValidatorEnable(document.getElementById('<%=FreelancerRequired.ClientID%>'), true);
                                            ValidatorEnable(document.getElementById('<%=ServiceRequired.ClientID%>'), true);
                                            Page_ClientValidate("RequestBookingValidationGroup");
    

    【讨论】:

    • 很高兴它有帮助。好奇你怎么称呼验证?按钮单击事件应类似于: Page.Validate("RequestBookingValidationGroup"); if(Page.IsValid){ // 点击这里的代码 }
    猜你喜欢
    • 2011-01-31
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多