我的RIA应用程序有很多js UI控件(几乎所有的都是jQuery UI部分,如datepicker,dialog,jqgrid)。因此,用户在一个页面上使用某些控件然后转到另一个页面然后单击所有页面组件具有初始状态(文本框为空,网格为空等等)。那么我如何能够持久保存UI控件状态,然后在页面之间进行恢复呢?似乎我需要一些像JS序列化/反序列化方法那样在用户服务器会话中存储序列化数据。我怎么能以最低的成本做到这一点?你是如何在你的项目中做到的?任何thougs,链接,帖子将非常感激。提前谢谢你们!
P.S。我的项目是ASP .NET MVC3
刚才我记得memnto设计模式。你们中的任何人都可以告诉我一些与这个想法有关的事 再次感谢!
答案 0 :(得分:0)
我写这篇文章是对你的问题的评论,但我把它作为一个答案,因为它可能是唯一的方法来做到这一点,而不必用某种插件来“破解”它。
使用Viewstate与您使用或不使用JQuery UI“addins”无关。您所要做的就是使用服务器端控件。
请注意,为此您必须使用控件客户端名称,例如:
$('#<%= MyDateTextbox.ClientID %>').datepicker();
这样,您可以在服务器端控件上应用JQuery UI,并利用Viewstate在后退按钮导航中恢复控件值。
答案 1 :(得分:0)
我会使用Persist-JS(Persist-JS on GitHub),jQuery(您已经使用)和json.js(JSON-js on GitHub)来实现。 像这样:
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的工作方式)。