坚持js用户控制状态

我的RIA应用程序有很多js UI控件(几乎所有的都是jQuery UI部分,如datepicker,dialog,jqgrid)。 那么用户在一个页面上使用一些控件然后转到另一个页面,然后单击所有页面组件具有初始状态(文本框为空,网格为空等等)。 那么如何保持UI控件状态,然后在页面之间进行恢复呢? 看来我需要一些像JS序列化/反序列化方法那样在用户服务器会话中存储序列化数据。 我怎样才能以最低的成本完成这项工作? 你是如何在你的项目中做到的? 任何thougs,链接,post将非常感激。 提前谢谢你们!

PS我的项目是ASP .NET MVC3


编辑

刚才我记得memnto设计模式。 你们中的任何人都可以告诉我与这个想法有关的事吗? 再次感谢!

我写这个作为你的问题的评论,但我把它作为答案,因为它可能是唯一的方法来做到这一点,而不必用某种侧插件“破解”它。

Viewstate的使用与您使用或不使用JQuery UI“addins”无关。 您所要做的就是使用服务器端控件。

请注意,为此您必须使用控件客户端名称,例如:

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

这样,您可以在服务器端控件上应用JQuery UI,并利用Viewstate在后退按钮导航上恢复控件值。

我会使用Persist-JS( GitHub上的Persist-JS ),jQuery(你已经使用)和json.js( GitHub上的JSON-js )来实现。 像这样的东西:

 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); } } }); } } }); 

和…

 //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)); }); 

换句话说,遍历页面上的所有输入,存储它们的值( $.val() ),创建一个JSON对象并为这些值保留它。 在恢复表单时,只需执行相反的操作 – 循环输入并通过名称formData[name]从JSON对象中获取属性。 那里有一些防御性东西(即:检查持久化对象是否为null,这就是persist-js的工作原理)。