日期:2014-05-18  浏览次数:20410 次

页面刷新后,能保持原来的层状态
问题如下:
  我做的网页,JS动态使用按钮控制层的显示和隐藏,一个页面里有好多层,层里面有按钮服务器控件,click后每次刷新后,页面都会回到初始状态,因为我起初设置层都是不显示的。我希望层能保持我点选按按钮前的状态。
  MaintainScrollPositionOnPostback 等属性,还有几个脚本都是返回的SCROLL的位置,我是动态的,尝试后都无效。
 

------解决方案--------------------
你需要在页面中维护层的状态,并在提交事件中把层状态信息一并post回去。然后在服务器端代码中去根据post回来的层状态信息组织脚本,去在新输出的页面中重新设定层的状态。
------解决方案--------------------
我举个最简单的例子来说明一下。
假设你的页面上用一个<DIV>作为一个层,一开始是不可见的。在操作过程中可能会变为可见,你想要做的就是当页面postback刷新之后,层的可见性还是保留提交前的那个状态。
要达到这样的目的,你需要作如下工作:
1、给这个DIV一个唯一的ID,比如layer_01
2、在ASPX页面中声明一个形式如function setLayerState(stateString)的java script函数,当其中包含"layer_01_visible=true"的值的时候,设置layer_01可见。具体写法我不提示了。
3、在ASPX页面中声明一个hidden field,假设叫做layerState,其value初始为空
4、当layer_01可见性发生改变的时候,用java script函数设定layerState的值为"layer_01_visible=true"。如果有多个层需要管理,你可以自己决定怎么存储,比方说增加"layer_01_visible=true;layer_02_visible=false;layer_01_height=100px"等等
5、在ASPX页面的Page_Load代码中,如果IsPostBack为真,则获取layerState这个隐藏字段的值,使用Page.RegisterStartupScript()功能调用setLayerState,参数就是layerState的值

通过这5个简单的步骤,就可以实现最基本的状态记忆。
------解决方案--------------------
顶楼上
------解决方案--------------------
HTML code
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="20_解决刷新后回到顶部的问题.aspx.cs" Inherits="_20_解决刷新后回到顶部的问题" MaintainScrollPositionOnPostback="true" %>

------解决方案--------------------
建议修改一下js控制div显示的代码,把显示控制和逻辑分开. 比如根据某个逻辑需要设置div1为可视. 如果直接做那就是在js直接判断逻辑,然后设置div1的属性. 修改之后应该是根据逻辑修改一个隐藏字段的值, 然后另外一个js函数在根据隐藏字段的值设置div1可视.这样的话,因为隐藏字段的值在post之后是保持的, 所以post之后只需要在调用一下js显示函数就可以还原可视设置了.

------解决方案--------------------
关注...
------解决方案--------------------
click后每次刷新后CS里面把那些层再次隐藏不行吗?苯法子
------解决方案--------------------
0_0