2010-01-27 16 views
6

Ich benutze jquery tab und folgende js-Methode, wie und was kann ich ändern, um den Zustand der Registerkarte zwischen Postbacks zu erhalten? (Dies setzt Registerkarten erste Reiter nach page_load)Jquery Postback, gleiche Registerkarte nach Postback

$(document).ready(function() { 

     //When page loads... 
     $(".tab_content").hide(); //Hide all content 
     $("ul.tabs li:first").addClass("active").show(); //Activate first tab 
     $(".tab_content:first").show(); //Show first tab content 

     //On Click Event 
     $("ul.tabs li").click(function() { 

      $("ul.tabs li").removeClass("active"); //Remove any "active" class 
      $(this).addClass("active"); //Add "active" class to selected tab 
      $(".tab_content").hide(); //Hide all tab content 

      var activeTab = $(this).find("a").attr("href"); //Find the href attribute value to identify the active tab + content 
      $(activeTab).fadeIn(); //Fade in the active ID content 
      return false; 
     }); 

Antwort

3

Sie können die aktiven Registerkarte verfolgen Javascript in einem versteckten Feld verwenden, dann das versteckte Feld überprüfen, wenn die Seite geladen wird. (Auch in Javascript)

Alternativ können Sie UpdatePanels mit ASP.Net AJAX verwenden, um die Postbacks zu beseitigen. (Beachten Sie, dass, wenn die Registerkarten in einem Update-Panel sind, werden sie nicht richtig funktionieren)

+0

Ich verwendete Update-Panel nicht Postback verursachen. –

+0

Ich habe ein verstecktes Feld verwendet, um die ausgewählte Registerkarte zu verfolgen. Es klappt. –

+0

Ich habe das Update-Panel verwendet .. aber wenn ich einen Button klicke auf den 2. Tab, verursacht das Postback das erste Tab angezeigt wird ... warum ist das? – Muhammedh

3

Eine Alternative zur Verwendung eines verstecktes Feldes ist die Cookie-Eigenschaft auf der Registerkarte Steuerelement verwendet

$ ("# Tabs "). Tabs ({ Cookie: { läuft ab: 1 } });

Sie benötigen die jquery.cookie.js Datei verweisen für diese

jQuery tabs cookie

+0

Funktioniert perfekt. Einfachste und eleganteste Lösung. – MGOwen

+0

Jedes Arbeitsbeispiel dazu wird sehr hilfreich sein! – Muhammedh

+0

jQuery UI eliminiert das Cookie-Geschäft bei 1.10 http://jqueryui.com/upgrade-guide/1.9/#deprecated-cookie-option – fortboise

1

zu arbeiten Versuchen Sie Folgendes:

<p class="hiddenData"><asp:HiddenField ID="hdnData" runat="server" /></p> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('.tabs li a').click(function() { }); 
     $('.tabs li').hover(function() { 
      var liData = $(this); 
      $('.hiddenData input:hidden').val(liData.find('span').text()); 
     }); 
     if ($('.hiddenData input:hidden').val() != '') { 
      var liList = $('.tabs li'); 
      var hiddenData = $('.hiddenData input:hidden').val(); 
      liList.each(function() { 
       if ($(this).find('span').text() == hiddenData) { 
        $(this).find('a').click(); 
       } 
      }); 
     } 
    }); 
</script> 
0

sagte Sie

//When page loads... 
$(".tab_content").hide(); //Hide all content 

Ich würde das mit CSS laden, da das schneller ist. hide macht wahrscheinlich eine Anzeige: keine;

eine Lösung schreibt Javascript von Codebehind.
und Beispiel mit C#

var selectedTab = IsAdvancedSearch ? "{'selected':1}" : String.Empty; 
ScriptManager.RegisterClientScriptBlock(this, GetType(), "search", String.Format(@"jQuery(document).ready(function() {{ jQuery('#search').tabs({0}); }});", selectedTab), true); 

oder Sie können ein Attribut der #search Tag mit C# und lesen Sie es mit js

C#

search.Attributes.Add("selectedtab", "1"); 

JS

hinzufügen
jQuery("#search").attr("selectedtab"); 

und eine andere Lösung ist mit Querystring.
können Sie den Wert aus der Querystring lesen.

Ich würde persönlich die erste oder die zweite wählen.

0

Der versteckte Feldansatz funktioniert gut für mich. Mit der ASPX

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

und die js-Ready-Funktion

$("#tabs").tabs({ active: <%= hfLastTab.Value %> }); 

die aktive Registerkarte enthält enthält, wird gemäß dem verborgenen Bereich eingestellt werden. (Das ist die Eigenschaft jQuery UI Version 1.9, 'aktiv' f.k.a."selected".) Die verschiedenen Steuerelemente, die Postback bereitstellen kann zum Festlegen von hfLastTab.Value auf den entsprechenden Index.

Ich wollte auch in der Lage sein, auf einen bestimmten Tab mit einer URL von einer anderen Seite zu zeigen, und verbrachte eine Menge Zeit Thrashing hinzufügen und versuchen, eine Hash-ref vom Ende zu analysieren, bevor Sie zu einem Querystring-Parameter gehen? t = N. Ich analysiere das in einem! Page.IsPostback-Zweig von Page_Load(). Für frische Seitenladevorgänge gehen wir zu Registerkarte 0, wenn nichts angegeben ist, oder zu Registerkarte N, wenn die Abfragezeichenfolge den Parameter aufweist. Es gibt viele Möglichkeiten, mit diesem Parsing umzugehen. Hier ist eine:

 if (!Page.IsPostBack) { 
      string pat = @"t=(\d)"; 
      Regex r = new Regex(pat, RegexOptions.IgnoreCase); 
      Match m = r.Match(Request.Url.Query); 
      if (m.Success) hfLastTab.Value = m.Groups[0].ToString(); 
     }