0

jQuery アコーディオンを使用しています。アコーディオン内には、コントローラー アクションを呼び出すリンクがほとんどありません。

    <div id="accordion" class="accordion">
    <h1 class="requestsheader"><a href="#1">Header 1</a></h1>
    <div>
        <table>
@foreach (var item in Model)
            {
<tr>
                    <td>
                        @Html.DisplayFor(modelItem => item.Name)
                    </td>
                    <td>
                        <div class="requestButton">
                            @Html.ActionLink("Send Request for Authorization", "SendRequest", new { id = item.Id })
                        </div>
                    </td>
                </tr>
}
</table>
    </div>

<h1 class="requestsheader"><a href="#2">header 2</a></h1>
    <div>
...
...
</div>

</div>

以下はJavaScriptコードです:

$("#accordion").accordion({
        collapsible: true, clearStyle: true, heightStyle: "content", navigation: true,active:false   
    })

アクションを呼び出すと、すべてのペインが折りたたまれます。アクションが呼び出された後、現在のペインを開いたままにする方法が必要です。これが隠しフィールドを使用して実行できる場合、mvc で隠しフィールドを使用する適切な方法は何ですか。

4

3 に答える 3

1

クッキーを使用するのが最善の方法だと思います。以下は私がそれを解決した方法です。これが同様の解決策を探している人に役立つことを願っています。

次のコードは、document.ready 関数に移動します。

  var activeIndex = parseInt(getCookie('openedPane'));

$("#accordion").accordion({
    collapsible: true, clearStyle: true, heightStyle: "content", navigation: true, active: activeIndex,
    activate: function (event, ui) {
        var index = $(this).children('h1').index(ui.newHeader);            
        setCookie('openedPane', index, 1);            
    },
    create: function (event, ui) {            
        deleteCookie('openedPane');   //Deleting the cookie when accordion is created         
    }
});    

以下は、Javascript で Cookie を設定/取得/削除するコードです。

function setCookie(name, value, days) {    
if (days) {
    var date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    var expires = "; expires=" + date.toGMTString();
}
else var expires = "";
document.cookie = name + "=" + value + expires + "; path=/";
}

function getCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
    return null;
}

function deleteCookie(name) {
    setCookie(name, "", -1);
}
于 2013-09-05T07:25:30.313 に答える
0

最後に私のコードはこれです。アクティブなアコーディオン ペインで動作します。

 $(function () {
      $("#accordion").accordion({
           collapsible: true
           clearStyle: true,
           heightStyle: "content",
           navigation: true, 
           active: false 
       });    
 });
于 2015-08-26T03:33:34.943 に答える