In Telerik ASP.NET MVC TabStrip möchte ich, dass die Seite sich merkt, welche Registerkarte zuletzt ausgewählt wurde und die Auswahl über mehrere Seitenanforderungen hinweg beibehält. Was ich habe, ist eine partielle Ansicht, die in mehreren Seiten zeigt und es enthält die TabStrip. Mit SelectedIndex wird die eingestellte Registerkarte immer ausgewählt, wodurch die Auswahl des Benutzers aufgehoben wird.
Antwort
Zu viele Anzeigen?Ich konnte keine offizielle Möglichkeit finden, dies über die Telerik-APIs zu tun, noch irgendwelche nützlichen Ratschläge in deren Forum, also beschloss ich, meinen eigenen Weg mit der Verwendung von zu gehen:
- Html.Telerik().TabStrip().ClientEvents() sowohl die OnSelect() als auch die OnLoad()
- Das Cookie-Plugin für jQuery
Dann verdrahtete ich sie wie unten, in der partiellen Ansicht, die den TabStrip enthält.
.ClientEvents(events => events
.OnSelect(() =>
{
%>
function(e) {
var item = $(e.item);
$.cookie('selectedTabIndex', item.index(), { path: '/' });
}
<%
})
.OnLoad(() =>
{
%>
function(e) {
var tabStrip = $("#TabStrip").data("tTabStrip");
var index = $.cookie('selectedTabIndex');
var domElement = $("li", tabStrip.element)[index];
tabStrip.select(domElement);
}
<%
})
)
Edit: Ich habe gemerkt, dass meine Antwort ein wenig unzureichend erklärt war, also habe ich sie ergänzt:
Falls es nicht offensichtlich ist, die OnSelect erfasst den Index der ausgewählten Registerkarte, wenn sie ausgewählt ist, und schreibt in ein Cookie namens selectedTabIndex. Der Pfad wird so gesetzt, dass er unsere gesamte Website abdeckt, aber wenn Sie das weglassen, wird ein neues Cookie für jeden unterschiedlichen Pfad ein neues Cookie (was vielleicht das gewünschte Verhalten sein). Jemand, der sich besser mit dem jQuery-Cookie-Plugin vertraut ist, möge mich korrigieren, wenn ich falsch liege, ich habe es nicht viel benutzt.
Dann in der OnLoad es tut die grundsätzlich das Gegenteil. Es findet die tabStrip, holt den Index aus dem Cookie, dann wird das domElement des der Registerkarte mit dem Index aus dem Cookie und sagt dem tabStrip, dass er dieses domElement auszuwählen.
Dies scheint in Chrome und IE recht gut zu funktionieren, aber in FFox 3 gibt es möglicherweise einige Macken.
Ich hoffe, dass das Telerik-Team in Betracht zieht, diese Funktion in ihre API aufzunehmen, denn ich halte sie für eine sehr nützliche Funktion. Entschuldigung, wenn es bereits ist, aber ich konnte es nicht in den Dokumenten zu finden.