我正在使用jquery构建一个asp.net webforms(3.5 sp1)应用程序,我可以在其中为UI设置动画,更改其状态.它一直运行良好,直到我开始做回发,其中UI显然将自身重置为其初始状态.
所以我的问题是,在回发之间保存和恢复jquery/UI状态的最佳实践是什么?
谢谢,埃吉尔.
更新:非常感谢大家,很好的投入,糟糕的我不能将多个答案标记为"答案".
我通常通过AJAX在会话中存储菜单状态或过滤器(div中的输入集)可见性等服务器端.当菜单展开或显示过滤器时,单击处理程序将向Web服务发出AJAX事件,该服务将记录菜单的状态或过滤用户会话中的可见性.在回发中,我使用与每个菜单/过滤器对应的会话变量,通过CSS设置它的初始状态.我发现这是更好的用户体验,因为如果您在客户端进行更改,则在加载后通过javascript更新页面时不会闪烁.
示例 - 因为我在路上这不是项目中的实际代码,可能不完整.使用jQuery.Web服务的URL将取决于您实现Web服务的方式.我正在使用ASP.NET MVC(主要是)因此我的控制器操作.
> ...
服务器端代码
[AcceptVerbs( HttpVerbs.POST )] [Authorization] public ActionResult SetFilterVisibility( string name, bool visible ) { Session[name] = visible; return Content( string.Empty ); // not used... } [AcceptVerbs( HttpVerbs.GET )] [Authorization] public ActionResult SomeAction( int id ) { ... ViewData["searchFilterVisibility"] = Session["searchFilter"]; ... return View(); }
我认为你指的是在回发之间保存ui小部件的状态(而不是保存用户首选项).
在特定的一系列交互之后,很多状态仅适用于特定小部件,特定用户(例如,展开此树节点,单击该网格行等).除非在页面加载中恢复状态对您很重要,否则这些内容不必进入数据库,甚至不需要进入会话.
所有那些我倾向于放入一两个对象的东西,例如:
treeState.expandedNodeId = 'foo'; gridState.selectedRowIndex = 3;
然后我定期将它保存在隐藏的字段中:
$('.treeState').val(Sys.Serialization.JavaScriptSerializer.serialize(treeState));
等等
该值将与回发结果一起发回,我只是deserialize
从保存的值中恢复我的小部件.很烦人,但效果很好.