如何在表单提交后使用会话状态隐藏某些表单字段?

时间:2014-11-18 19:58:25

标签: asp.net

我想知道在提交表单后使用ASP.NET会话状态是否可以在一段时间内隐藏文本字段和按钮?

1 个答案:

答案 0 :(得分:0)

我会添加一个计时器控件。只需将Enabled属性设置为false即可。然后在页面上加载事件检查以确保IsPostBack为True,如果是,则1)将控件的所有可见属性设置为“false”,2)将Interval设置为您希望控件不可见的长度; 3)启用计时器。然后,只需确保为计时器的OnTick事件创建事件处理程序函数。在该例程中,您可以将所有控件的可见属性设置为“true”。然后确保将计时器的enabled属性设置为false。

我知道你问过使用ASP会话状态,但只有在页面回发后才会发挥作用。所以......是的......你可以用Global.asax页面做一些事情,一旦会话超时就让输入再次可见,但是除非用户做了一些回复到页面的动作,否则你不会是能够确定会话是否已超时。因此,如果您希望输入仅在5分钟内不可见 - 除非发生回发,否则它们在5分钟结束后不会神奇地再次变为可见。如果半小时内没有回发,即使您将会话设置为仅5分钟,它们也会在整个时间内保持隐身状态。

定时器控件是一个AJAX控件,它允许客户端的“时钟启动”,而不管回发。


如果您不想使用AJAX扩展,可以将自己的javascript插入页面。在表单上放置一个名为“hfMakeVisibleTimer”的asp隐藏字段,并将其值设置为“0”。在你的代码后面的表单(当它的回发时)确保将此隐藏字段的值设置为会话超时:

hfMakeVisibleTimer.Value = (Session.Timeout * 1000).ToString();

在您的页面上创建一个javascript函数,以便再次显示控件:

function MakeControlsVisible() {
    document.getElementById("control1").style.display = "";
    document.getElementById("control1").style.visibility = "visible";
    document.getElementById("control2").style.display = "";
    document.getElementById("control2").style.visibility = "visible";
    document.getElementById("control3").style.display = "";
    document.getElementById("control3").style.visibility = "visible";     
}

然后只需将此片段的javascript添加到Body OnLoad事件:

var myVal = document.getElementById("hfMakeVisibleTimer").value;
if (myVal != "0") {
    window.setTimeout(MakeControlsVisible(),myVal);
}