如果有以下标记。
<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#代码。
答案 0 :(得分:1)
我不明白为什么在check/uncheck
checkbox
时不应该回发,但如果该复选框的唯一目的是hide/unhide
某个小组,我宁愿做它在javascript中。为了隐藏某些面板而对服务器进行完整回发似乎非常糟糕。
在javascript中,您可以执行此操作来隐藏面板:
document.getElementById('<%=pnlTVLic.ClientID%>').display='none';
这就是为了表明:
document.getElementById('<%=pnlTVLic.ClientID%>').display='block';
它会变得更快更好。只需放置一个常规复选框而不是ASP.NET,然后订阅onclick事件。
对不起,还有一条评论:
当你说复选框应该总是导致回发时,我认为你错了。不,如果其中一个验证器在面板内部触发,则复选框将不会导致回发,直到满足条件。
答案 1 :(得分:0)
这就是我所做的并且有效。
在复选框onclick事件上我禁用了所有validation
控件并立即执行了Page_ClientValidate();
并且它有效。