0

如果有以下标记。

<asp:checkbox id="chkTVLic" runat="server" text="TV Licence" oncheckedchanged="chkDocs_CheckChanged"
                                autopostback="true" CausesValidation="false" />
                            <asp:panel id="pnlTVLic" runat="server" visible="false">
                                <div class="toggle-item-link1 document-date">
                                    <asp:panel id="pnlTVLicIssueDate" runat="server">
                                        <p>
                                            Please enter the date of issue
                                        </p>
                                        <div class="fm-req">
                                            <asp:textbox id="txtTVLicIssueDate" cssclass="tb size2" runat="server" onblur="return true;"></asp:textbox>
                                            <cc2:calendarextender id="caleTVLicIssueDate" runat="server" targetcontrolid="txtTVLicIssueDate"
                                                popupbuttonid="ibnTVLicIssueDate" popupposition="BottomLeft" animated="true"
                                                format="dd/MM/yyyy">
                                            </cc2:calendarextender>
                                            <asp:imagebutton id="ibnTVLicIssueDate" runat="server" imageurl="../images/img-calendar-day.png"
                                                alternatetext="Calendar" tooltip="Pick Date" cssclass="date-picker" />
                                            <asp:requiredfieldvalidator id="rfvTVLicIssueDate" CssClass="error" runat="server" controltovalidate="txtTVLicIssueDate"
                                                display="Dynamic" errormessage="Required" setfocusonerror="true" validationgroup="TVLic"></asp:requiredfieldvalidator>
                                            <asp:comparevalidator id="cmvTVLicIssueDate" CssClass="error" runat="server" errormessage="Not a valid date"
                                                controltovalidate="txtTVLicIssueDate" operator="DataTypeCheck" type="Date" setfocusonerror="true"
                                                validationgroup="TVLic" display="Dynamic" cultureinvariantvalues="true"></asp:comparevalidator>
                                            <asp:customvalidator id="cuvTVLicIssueDate12Months" CssClass="error" runat="server" controltovalidate="txtTVLicIssueDate"
                                                validationgroup="TVLic" display="Dynamic" onservervalidate="cuvDocIssueDate12Months_ServerValidate"
                                                errormessage="Document must be less than 12 months old."></asp:customvalidator>
                                        </div>
                                    </asp:panel>
                                    <asp:panel id="pnlTVLicApprove" runat="server">
                                        <asp:LinkButton id="lbnTVLicApprove" runat="server" CssClass="screen-hide"
                                                alternatetext="Confirm TV Licence" tooltip="Confirm TV Licence" Text="OK" CausesValidation="false" OnClick="lbnApproveConfirm_Click"  />

                                        <asp:imagebutton id="ibnTVLicApprove" runat="server" imageurl="../images/img-accept-doc-off.png"
                                            alternatetext="Approve" tooltip="Approve" cssclass="approval-btn" causesvalidation="true" validationgroup="TVLic" OnMouseDown="HandleApproveClick('TVLic','lbnTVLicApprove');return false;" OnClientClick="HandleApproveClick('TVLic','lbnTVLicApprove');return false;" />
                                        <span class="approval-label">Accept document:</span></asp:panel>
                                </div>
                            </asp:panel>

该应用程序是用 c# 编写的,但我没有发布任何实际代码,因为与此标记相关的所有用户代码似乎都可以正常工作。

问题是 CheckBox chkTVLic 已将验证设置为 false 并将 autopostback 设置为 true。因此,当我选中和取消选中它应该回发的复选框时,无论发生什么。大多数情况下,这正是它所做的,结果是在选中和取消选中 pnlTVLic 时显示和隐藏它。但是,如果面板内的任何验证器触发,则该复选框不会在第一次导致回发。它将在所有后续时间,但绝不是第一次。但是,它应该总是导致回发。什么可以阻止它。在有人问没有用编写客户端代码之前,一切都是纯 .net 标记和 c# 代码。

4

2 回答 2

1

我不明白为什么它不应该回check/uncheckcheckbox,但如果该复选框的唯一目的是hide/unhide面板,我宁愿在 javascript 中进行。仅仅为了隐藏一些面板而对服务器进行完整的回发似乎真的很糟糕。

在 javascript 中,您可以这样做来隐藏面板:

document.getElementById('<%=pnlTVLic.ClientID%>').display='none';

这表明它:

document.getElementById('<%=pnlTVLic.ClientID%>').display='block';

它会变得更快更好。只需放置一个常规复选框而不是 ASP.NET 复选框并订阅 onclick 事件。


对不起,再评论一条:

当你说复选框应该总是导致回发时,我认为你错了。不,如果其中一个验证器在面板内触发,则在满足条件之前,复选框不会导致回发。

于 2010-11-11T14:35:30.653 回答
0

这就是我所做的,并且奏效了。在复选框 onclick 事件中,我禁用了所有validation控件并立即执行此操作Page_ClientValidate();并且它起作用了。

于 2012-01-24T00:38:12.243 回答