javascript Persist js Benutzer steuert den Status




jquery asp.net-mvc (2)

Ich habe dies als Kommentar zu Ihrer Frage geschrieben, aber ich stelle es als eine Antwort dar, da es der einzige Weg sein könnte, dies zu tun, ohne es mit irgendeiner Art von Seiten-Plugins "hacken" zu müssen.

Die Verwendung von Viewstate hat nichts damit zu tun, dass Sie JQuery UI "addins" verwenden oder nicht. Alles, was Sie tun müssen, ist stattdessen serverseitige Kontrollen zu verwenden.

Beachten Sie, dass Sie dafür den clientseitigen Control-Namen verwenden müssen.

$('#<%= MyDateTextbox.ClientID %>').datepicker(); 

Auf diese Weise können Sie JQuery UI auf serverseitige Steuerelemente anwenden und den Viewstate-Wert zum Wiederherstellen der Steuerelemente bei der Navigation auf der Navigationsseite verwenden.

Meine RIA-Anwendung hat viele js UI-Steuerelemente (fast alle von ihnen sind jQuery-UI-Teile wie datepicker, dialog, jqgrid). Also arbeitet der Benutzer mit einigen Steuerelementen auf einer Seite und dann zu einer anderen Seite und klickt dann auf alle Seitenkomponenten zurück, hat den Anfangszustand (Textfelder sind leer, Gitter sind leer und so weiter). Wie kann ich den Status der Benutzeroberfläche beibehalten und zwischen den Seiten wiederherstellen? Es scheint, dass ich einige JS-Serialisierungs- / Deserialisierungsmethoden benötige, die serialisierte Daten in einer Benutzerserversitzung speichern. Wie kann ich es mit minimalen Kosten machen? Wie geht es euch in euren Projekten? Irgendwelche, Links, Beiträge werden sehr geschätzt. Danke Jungs im Voraus!

PS Mein Projekt ist ASP .NET MVC3

BEARBEITEN

Gerade jetzt erinnere ich mich an Memnto Entwurfsmuster. Könnte irgendjemand von euch mir etwas zu dieser Idee sagen? Danke noch einmal!


Ich würde es mit Persist-JS ( Persist-JS auf GitHub ), jQuery (die Sie bereits verwenden) und json.js ( JSON-js auf GitHub ) tun . Etwas wie das:

var store;
//Restore form data
$(function() {
    store = new Persist.Store('My Page Store');
    var formDataStr = store.get('formdata');
    if (formDataStr !== null) {
        var formData = eval('(' + formDataStr + ')');
        if (formData.hasData) {
            $(':input').each(function() {
                if (this.name != undefined && this.name != "") {
                    if (formData[this.name] != undefined) {
                        $(this).val(formData[this.name].value);
                    }
                }
            });
        }
    }
});

und...

//Persist form data
$(window).unload(function() {
    var formData = {};
    $(':input').each(function() {
        if (this.name != undefined && this.name != "") {
            formData[this.name] = {};
            formData[this.name].value = $(this).val();
        }
    });
    formData.hasData = true;
    store.set('formdata', JSON.stringify(formData));
});

Mit anderen Worten, durchlaufen Sie alle Eingaben auf der Seite, speichern Sie deren Wert ( $.val() ), erstellen Sie ein JSON-Objekt und bewahren Sie es für diese Werte auf. Wenn Sie das Formular wiederherstellen, führen Sie einfach das Gegenteil durch - durchlaufen Sie die Eingaben und greifen Sie die Eigenschaften des JSON-Objekts mit dem Namen formData[name] . Es gibt etwas defensives Zeug (zB: Suche nach einem persistenten Objekt als null, so wie persist-js funktioniert).







datepicker