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

のときにポストバックしてはならない理由がわかりませんが、そのチェックボックスの唯一の目的がパネルに対するものである場合は、JavaScriptで行うことをお勧めcheck/uncheckします。一部のパネルを非表示にするためだけにサーバーへの完全なポストバックを行うのは、非常に悪いようです。checkboxhide/unhide

JavaScript では、これを実行してパネルを非表示にすることができます。

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

そして、これはそれを示すために:

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

それはとても速く、より良くなるでしょう。ASP.NET の代わりに通常のチェックボックスを配置し、onclick イベントをサブスクライブするだけです。


申し訳ありませんが、もう 1 つコメント:

チェックボックスが常にポストバックを引き起こすと言うのは間違っていると思います。いいえ、バリデーターの 1 つがパネル内で起動した場合、チェックボックスは条件が満たされるまでポストバックを引き起こしません。

于 2010-11-11T14:35:30.653 に答える
0

これは私がやったことであり、うまくいきました。チェックボックスのonclickイベントで、すべてのvalidationコントロールを無効にしてすぐに無効にし、機能Page_ClientValidate();しました。

于 2012-01-24T00:38:12.243 に答える