2010-09-15 6 views
17

Ich verwende jQuery-Registerkarten und eine ASP.NET-Listenansicht, um einige Informationen anzuzeigen und zu bearbeiten. Mein Problem ist, dass wenn ein Benutzer einen neuen Datensatz in eines der Listenansichtselemente einfügt, meine jQuery-Registerkarten auf die erste Registerkarte zurückkehren. Gibt es eine Möglichkeit, den Überblick über den Tab zu behalten, auf dem ich mich befinde, oder zu verhindern, dass er auf dem Post zurück liegt?Bleiben Sie auf dem aktuellen jQuery Tab über Post zurück?

+0

wie kann ich implementieren diese zu meinen Code bitte .. https: // Stackoverflow.com/q/48215218/4233410 –

Antwort

29

In asp.net Sie es in einem versteckten Feld speichern können, ohne einen Cookie zu verwenden (keine Notwendigkeit für die jquery Cookie-Referenz).

verwenden:

$(function() { 
    $("#tabs").tabs({ 
     activate: function() { 
      var selectedTab = $('#tabs').tabs('option', 'active'); 
      $("#<%= hdnSelectedTab.ClientID %>").val(selectedTab); 
      }, 
     active: <%= hdnSelectedTab.Value %> 
    }); 
}); 

Dann im Körper, erklären Sie Ihre verborgenen Registerkarte Feld:

<asp:HiddenField ID="hdnSelectedTab" runat="server" Value="0" /> 

Grundsätzlich auf die Auswahl einer Registerkarte Sie den ausgewählten Registerkarten Wert in der asp sind Speichern versteckt Feld. Dann zeigen Sie den Wert an.

+1

nur als Referenz, funktioniert in neueren Versionen von jQuery UI, das 'show' /' selected' nicht mehr. Verwenden Sie stattdessen 'activate' und' active'. –

+2

besser, den Code zu ersetzen: aktiv: <% = hdnSelectedTab.Value%> mit aktiv:. $ ("# <% = HdnSelectedTab.ClientID%>") val(). Ansonsten haben Sie Probleme mit UpdatePanel. – ZooZ

+1

Nach dem Ersetzen 'Option', 'ausgewählt' mit 'Option', 'aktiv' und mit aktiv:. $ ("# <% = HdnSelectedTab.ClientID%>") val(), wie @ZooZ erwähnt arbeitete das für mich in Ordnung . –

4

Es gibt built-in support für die jQuery cookie plugin (direct download). Sie verwenden es wie folgt:

$("#tabs").tabs({ 
    cookie: { expires: 7 } //1 week 
}); 

Es ist nicht das gleiche wie die Aufrechterhaltung über Postback, aber es bietet normalerweise den gewünschten Effekt.

0

Sie können die aktuellen Registerkarte erhalten, indem dies zu tun:

var selected = $tabs.tabs('option', 'selected'); 

Sie können dann auf die Registerkarte wählen (nach Abschluss des POST), indem Sie diese:

$tabs.tabs('select', selected); 

Beachten Sie, dass die Registerwahl ist Indexierung auf 0-Basis. Wenn Sie also 2 auswählen, wird die dritte Registerkarte ausgewählt.

0

Ich bin kein .NET-Typ, aber Sie können wahrscheinlich auf das Submit() - Ereignis des Formulars zugreifen und die aktuell aktive Registerkarte mit Ihren Formulardaten an den Server senden. Auf diese Weise können Sie einfach die richtige Registerkarte auf der Serverseite auswählen, wenn Sie das DOM und JS tatsächlich generieren. wie

Etwas ...

$("#the_form").submit(function(){ 
    var $form   = $(this); 
     selected_tab_idx = $("#the_tabs").tabs("option", "selected"); 
    $('<input />', {type: hidden, name: 'tab_index', value: selected_tab_idx}).appendTo($form); 
    return true; 
}); 
29

Bei neueren Versionen von jQuery und jQuery UI, wird dies sein:

$(function() { 
     $("#tabs").tabs({ 
      activate: function() { 
       var selectedTab = $('#tabs').tabs('option', 'active'); 
       $("#<%= hdnSelectedTab.ClientID %>").val(selectedTab); 
      }, 
      active: document.getElementById('<%= hdnSelectedTab.ClientID %>').value 
     }); 
    }); 

Die ‚ausgewählt‘ Option ‚aktiv‘ ersetzt wird ... Ofcourse Sie müssen noch das versteckte Feld hinzuzufügen:

<asp:HiddenField ID="hdnSelectedTab" runat="server" Value="0" /> 
+3

Das funktioniert für mich (jQuery-UI v1.10.2) – mghaoui

+0

Das funktioniert auch für mich – JIKKU

+0

arbeitete für mich (Query v1.9.0) – Bachask8

1

Diese Lösung für mich gearbeitet: Source http://saradesh.com/tajuddin/index.php/keep-the-selected-jquery-tab-active-on-partial-post-back-in-asp-net/

<script type="text/javascript"> 
     var selTab; 
     $(function() { 
      var tabs = $("#tabs").tabs({ 
       show: function() { 
        //get the selected tab index 
        selTab = $('#tabs').tabs('option', 'selected'); 

       } 
      }); 

     }); 

    function pageLoad(sender, args) { 

     if (args.get_isPartialLoad()) { 

      $("#tabs").tabs({show: function() { 
        //get the selected tab index on partial postback 
        selTab = $('#tabs').tabs('option', 'selected'); 

       }, selected: selTab }); 

     } 
    }; 

    </script> 
2

Try dies:

auf die Seite hinzufügen:

<asp:HiddenField ID="hdnSelectedTab" runat="server" Value="0" /> 

zum Skript hinzufügen:

$(function() { 
    var activeIndex = parseInt($get("hdnSelectedTab").value); 
    $("#tabs").tabs({ 
     active: activeIndex, 
     activate: function (event, ui) { 
      $get("hdnSelectedTab").value = ui.newTab.index(); 
     } 
    }); 
}); 
+0

Ich denke, es ist besser mit $ ("# <% = hdnSelectedTab.ClientID%>") –

Verwandte Themen