0

ASP.NETページのポストバック後にliがクリックされたときに、アクティブなアコーディオンを開いたままにしておくという問題があります。

スクリプトは次のとおりです。

$(document).ready(function () {
    $('#nav > li > a').click(function () {
        if ($(this).attr('class') != 'active') {
            $('#nav li ul').slideUp();
            $(this).next().slideToggle();
            $('#nav li a').removeClass('active');
            $(this).addClass('active');
        }
    });

});

マークアップは次のとおりです。

                            <ul id="nav">
                                <li><a href="#">Item 1</a>
                                    <ul>
                                        <li><a href="#">Sub-Item 1 a</a></li>
                                        <li><a href="#">Sub-Item 1 b</a></li>
                                        <li><a href="#">Sub-Item 1 c</a></li>
                                    </ul>
                                </li>
                                <li><a href="#">Item 2</a>
                                    <ul>
                                        <li><a href="#">Sub-Item 2 a</a></li>
                                        <li><a href="#">Sub-Item 2 b</a></li>
                                    </ul>
                                </li>
                                <li><a href="#">Item 3</a>
                                    <ul>
                                        <li><a href="#">Sub-Item 3 a</a></li>
                                        <li><a href="#">Sub-Item 3 b</a></li>
                                        <li><a href="#">Sub-Item 3 c</a></li>
                                        <li><a href="#">Sub-Item 3 d</a></li>
                                    </ul>
                                </li>
                                <li><a href="#">Item 4</a>
                                    <ul>
                                       <li><a href="Facilitysoft_masterdetails.aspx?view=1">Site Master</a></li>
                                            <li><a href="Facilitysoft_masterdetails.aspx?view=2">Phase Master</a></li>
                                            <li><a href="Facilitysoft_masterdetails.aspx?view=3">Block Master</a></li>
                                            <li><a href="Facilitysoft_masterdetails.aspx?view=4">Subblock Master</a></li>
                                            <li><a href="Facilitysoft_masterdetails.aspx?view=5">Floor Master</a></li>
                                            <li><a href="Facilitysoft_masterdetails.aspx?view=6">Flat Master</a></li>
                                            <li><a href="Facilitysoft_masterdetails.aspx?view=7">Issue Master</a></li>
                                            <li><a href="Facilitysoft_masterdetails.aspx?view=8">Gym/Swim Master</a></li>
                                            <li><a href="Facilitysoft_masterdetails.aspx?view=9">Stock Master</a></li>
                                            <li><a href="Facilitysoft_masterdetails.aspx?view=10">Clubhouse Master</a></li>
                                    </ul>
                                </li>
                            </ul>

たとえば、「アイテム4」をクリックしてから「クラブハウスマスター」をクリックすると、そのアコーディオンが折りたたみ可能になり、その特定の状態を維持する必要が生じた後、その特定のaspxページが表示されます。

4

2 に答える 2

0

ここでの問題は、ポストバック後に HTML がレンダリングされてデフォルトの状態に戻ることです。これは、この場合、サーバーが記憶しているページの更新に相当します。

したがって、ここでのオプションは、ポストバックの終了後に発生する endRequest ハンドラーでこれを処理することです。

$(function() {
     PostBack();

     Sys.WenForms.PageRequestManager.getInstance().add_endRequest(PostBack);
});

function PostBack(){
     // You need to save the state of the Accordion
     // just before the postback
     // and handle it here..
     // Maybe store it in a hiddenField 
     // and retrieve it to change the settings..
}
于 2012-09-28T06:41:39.517 に答える
0

同様の問題がありました。つまり、GET リクエストの場合にアコーディオンの状態を保存したかったのです。私のマスターテンプレートでは、ページの切り替えケースを書きました

if (strPage.EndsWith("page1.aspx")
                || strPage.EndsWith("page2.aspx"))

                this.hdnfldtset.Value="ELS";
            else if (strPage.EndsWith("page3.aspx")                
                || strPage.EndsWith("page4.aspx")

                this.hdnfldtset.Value="CMS";

次に、マスター ページの JavaScript で、この非表示の値を読み取り、適切なアコーディオン セクションを開閉します。これは、アイテムが simple のようなページの GET を使用する場合に機能します。私の申請ではそうでした。あなたの場合、それがポストバックの場合、隠しフィールドを使用してjavascriptで設定および取得できます。

于 2014-04-23T07:28:19.343 に答える