0

私はまだこれにかなり慣れておらず、答えを見つけようとしているので、これを繰り返さないことを願っています.

私は ASP.NET を使用しており、onCheckedChanged メソッドを使用して、変更時にポップアップ ボックスを表示するチェックボックス コントロールを使用しています。このポップアップ ボックスには、いくつかの情報と、ポップアップを正常に閉じる [閉じる] ボタンがあります。

私が望むのは、チェックボックスがオフになっている場合にポップアップが表示されないようにすることです。現在、コントロールがチェックされていない場合にエクステンダー呼び出しをキャンセルするコード ビハインド メソッドを呼び出す onCheckedChanged がありますが、ポップアップが閉じられる前にすぐに表示されます。どうすればこれを防ぐことができますか?

これは適切なページ コードです。

        <div class="row" id="divDDMandate" runat="server">

        <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Always">
            <ContentTemplate>
                <asp:CheckBox ID="chkDDMandate" Width="20px" Visible="true" runat="server" AutoPostBack="true"
                 OnCheckedChanged="clientchkDDMandateChanged(this);" on  />        
                <asp:Literal ID="ltlDDMandate" runat="server">Direct Debit Mandate (by post)</asp:Literal>

            <asp:PopupControlExtender ID="chkDDMandate_PopupControlExtender" runat="server" 
                DynamicServicePath="" Enabled="true" PopupControlID="PanelDDMandateDownload"
                TargetControlID="chkDDMandate"
                Position="Bottom" OffsetX="-20" OffsetY="10" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>

...そして、これは私のコードビハインドメソッドです:

        protected void chkDDMandateChanged(object sender, EventArgs e)
    {
        //Cancel the panel if unchecking
        if ((!chkDDMandate.Checked) && chkDDMandate_PopupControlExtender.Enabled)
        {
            chkDDMandate_PopupControlExtender.Cancel();
        }
    }

どんな助けにも感謝します。

乾杯

4

2 に答える 2

0

AutoPostBack="true"chkDDMandate チェックボックスから削除し、ScriptManager コントロールの後に以下のスクリプトを追加します。

<script type="text/javascript">
    function pageLoad() {
        var extender = $find("<%= chkDDMandate_PopupControlExtender.ClientID %>");
        extender.remove_showing(onPopupShowing);
        extender.add_showing(onPopupShowing);
    }

    function onPopupShowing(sender, args) {
        var checkBoxChecked = $get("<%= chkDDMandate.ClientID %>").checked;
        args.set_cancel(!checkBoxChecked);
    }
</script>
于 2012-07-11T20:44:55.880 に答える
0

Yuriy からイベント ハンドラーを提供された後、隠しフィールドを使用して、ポップアップとチェックボックスの可視性を追跡する必要がありました。

これは、チェックボックス コントロールが設定されている設定を onClick メソッドが使用し、onShowing メソッドがコントロールの現在の表示設定を使用していたという事実と、目盛りが削除されているときにポップアップが表示されないようにしたかったためです。非表示フィールドを使用して可視性設定を維持し、必要なときに更新する必要がありました。

ポップアップ エクステンダの _visible プロパティが常に「false」に設定されていたことに驚いたので、それも使用できませんでした。

これは少しハックかもしれませんが、これは興味のある人のための私の現在の JavaScript コードです。

    <script type="text/javascript">

     function pageLoad() {
     // Attach an event handler for over-riding the showing Popup.
         var extender = $find("PopupControlExtenderBehaviorID");
         extender.remove_showing(onPopupShowing);
         extender.add_showing(onPopupShowing);

     // Initialise the hidden fields based on the page status after refresh.
         var hfPopup = $get("ctl00_body_PopupVisibleID");
         var hfCheckbox = $get("ctl00_body_CheckboxChecked");

     // Popup will always be hidden on page refresh
         hfPopup.value = "Hidden";
         hfCheckbox.value = $get("ctl00_body_chkDDMandate").checked;
     }  

     function onPopupShowing(sender, args) {
        // This function will over-ride the Popup showing if applicable.
         var popupVisible = $get("ctl00_body_PopupVisibleID");
         var checkboxChecked = $get("ctl00_body_CheckboxChecked");

        // If Popup hidden and 'tick' being taken out of the Checkbox, don't show the Popup.
         if (popupVisible.value == "Hidden" && checkboxChecked.value == "true") {
             args.set_cancel(true);
         }
         else if (popupVisible.value == "Hidden") {
            popupVisible.value = "Visible";
            }
            else {popupVisible.value = "Hidden";}

     }

    function OnClientClickCheck(o) {
        // This function will set the Hidden field value of Checkbox.
        // This is because when the OnClick method reads the control checkbox value it uses the value it's 
        // being set to; whereas, the onPopupShowing method uses the value it is currently displaying!
        var pce = $find('PopupControlExtenderBehaviorID');
        var checkboxChecked = $get("ctl00_body_CheckboxChecked");
        var isChecked = o.checked;

        if (isChecked) {
        // isChecked is what it is being changed to...
            checkboxChecked.value = "false";
        }
        else {
            checkboxChecked.value = "true";
        }
        pce.showPopup();
    }
</script>

ここに来るのを手伝ってくれてありがとう。

于 2012-07-13T10:12:04.213 に答える