0

スクリプトを変更する必要がありますが、jquery にあまり慣れていないため、変更できませんでした

ページのポストバック時に、パネルの状態を維持したい。現在、ページを更新すると、すべてのパネルが折りたたまれています。

私は以下のコードを使用しています

$(document).ready(function() {
    $(“DIV.ContainerPanel > DIV.collapsePanelHeader > DIV.ArrowExpand”).toggle(function() {
        $(this).parent().next(“div.Content”).show(“slow”);
        $(this).attr(“class”, “ArrowClose”);
    },function() {
        $(this).parent().next(“div.Content”).hide(“slow”);
        $(this).attr(“class”, “ArrowExpand”);
    });
});

助けてください

4

3 に答える 3

0

あなたが求めているのは、現在開いているパネルを覚えておくことです。

このパネルはネイティブのasp.netコントロールではないため、asp.netはポストバック間でその値を記憶しません。

1つの解決策は、コンテナーに非表示の入力コントロールを保持し、その入力で現在開いているdivの値を維持することです。

Asp.netは、ポストバックでもこのデータを送受信します。

ドキュメントの準備ができたら、この値を読み取って開いているパネルを再度開くことができます。

編集:いくつかのコードを追加しました

あなたのセレクターから、私はあなたのhtmlがこのように見えると思います。

<div class="ContainerPanel">
    <div class="collapsePanelHeader">
        <div class="ArrowExpand"">

        </div>
    </div>
    <div id="content1" class="Content"">

    </div>
    <div class="collapsePanelHeader">
        <div class="ArrowExpand"">

        </div>
    </div>
    <div id="content2" class="Content"">

    </div>
    <input id="selectPanel1" runat="server" class="selectPanel"/>
</div>

各コンテンツブロックにIDを追加しました。IDがない場合は、このコードを機能させるためにIDを追加する必要があります。

ContainerPanelの下部にある入力タグに注意してください。これは、どのdivが開いていたかを覚えておくために必要になります。asp.netでは、要素ごとに一意のIDタグが必要です。

<input id="selectPanel1" runat="server" class="selectPanel"/>

そして、jsは次のようになります:

$(document).ready(function() {
    $("div.ContainerPanel > div.collapsePanelHeader > div.ArrowExpand").toggle(function() {
        $(this).parent().next("div.Content").show("slow");
        $(this).attr("class", "ArrowClose");
        //Put the id of the selected content into an input
        //This is so that it goes to the server
        var inputBox = $(this).parent().parent().find(".selectPanel");
        inputBox.val("#" + $(this).parent().next("div.Content").attr("id"));
    },function() {
        $(this).parent().next("div.Content").hide("slow");
        $(this).attr("class", "ArrowExpand");
    });
    //This supports multiple ContainerPanel divs.
    $("div.ContainerPanel").each(function(e){
        //retrive value of div open before postback and show it
        var selectedContentId = $(this).find(".selectPanel").val();
            if(selectedContentId != "")
            $(selectedContentId).show();
    }); 
});
于 2012-09-01T16:54:27.197 に答える
0

私はこの2日間、自分のコードでこの課題に取り組んでいました。jQueryまたはCodebehindから、あるいは展開/折りたたみアイコンからでも、9つの異なるパネルを展開または折りたたむことができ、ポストバックを最小限に抑える必要があります。また、入力時に各テキストボックス、ddl、チェックボックスの値をキャプチャする必要があります。

私のソリューションは、jQueryと対話し、セッションで構造を管理するWebサービスでした。コードビハインドとjQueryコードは、データをWebサービスと共有できます。

構造体に保持する値のセットの1つは、パネルが展開されているか折りたたまれているかを示すフラグです。

これはあなたの問題にとってやり過ぎかもしれませんが、このソリューションの柔軟性は驚くほど強力です。データの大きなチャンクを単一のクラス構造として定義することで、1〜3行のコードでほぼすべてのデータを読み取って更新できます。

于 2012-10-20T03:31:40.170 に答える
0

あなたが何を作成しているのか、またはポストバックの理由はわかりませんが、最善のアプローチはポストバックを排除し、それをajax jQueryで処理することです。あなたが抱えている問題を解決し、より速く、よりユーザーフレンドリーな体験を生み出します。

あなたが何をしているのか、どのようなセキュリティ上の問題があるのか​​ わかりませんが、それがオプションである場合は ajax を調べてください。これは、ページの状態を覚えるためだけの大量のコードです。

于 2012-09-01T18:28:27.203 に答える