我有你的基本asp.net网页表单,其中包含一些客户端JavaScript,强制页面超时,然后在5分钟后重定向。主要是为了保护可能的敏感信息。
在超时时,我想强制服务器回发,允许我保存表单值以供将来编辑。
我用过ClientScript.GetPostBackClientHyperlink()和ClientScript.GetPostBackEventReference()。这两个似乎都给我带来了EventValidation问题。是的,我可以关闭事件验证,但是有没有不同的或者更好的方法呢?
理想情况下,我不想调用控件(它必须显示),而只是使用某种类型的参数引发回发,我可以将服务器端识别为超时条件的结果。
发布于 2009-02-10 18:54:24
没有很好的解决方案,所以我自己建了一个。一个非常简单的自定义控件。欢迎评论。
using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace BinaryOcean.Web.Library.WebControls
{
[ToolboxData("<{0}:PostBackTimer runat=\"server\" />"), DefaultProperty("Seconds"), DefaultEvent("Timeout")]
public class PostBackTimer : Control, IPostBackEventHandler
{
public PostBackTimer() { }
public string CommandArgument
{
get { return (string)ViewState["CommandArgument"] ?? string.Empty; }
set { ViewState["CommandArgument"] = value; }
}
public string CommandName
{
get { return (string)ViewState["CommandName"] ?? string.Empty; }
set { ViewState["CommandName"] = value; }
}
public bool Enabled
{
get { return (bool)(ViewState["Enabled"] ?? true); }
set { ViewState["Enabled"] = value; }
}
public int Seconds
{
get { return (int)(ViewState["Seconds"] ?? 0); }
set { ViewState["Seconds"] = value; }
}
[Description("PostBackTimer_OnTimeout")]
public event EventHandler Timeout = delegate { };
[Description("PostBackTimer_OnCommand")]
public event CommandEventHandler Command = delegate { };
public void RaisePostBackEvent(string eventArgument)
{
Timeout(this, EventArgs.Empty);
Command(this, new CommandEventArgs(CommandName, CommandArgument));
}
protected override void OnPreRender(EventArgs e)
{
if (Enabled && Seconds > 0)
{
var postback = Page.ClientScript.GetPostBackEventReference(this, null);
var script = string.Format("setTimeout(\"{0}\",{1});", postback, Seconds * 1000);
Page.ClientScript.RegisterStartupScript(GetType(), "PostBackTimer_" + UniqueID, script, true);
}
base.OnPreRender(e);
}
}
}发布于 2009-02-09 18:29:30
这可能有点夸张,但您可以设置一个javascript计时器来触发web服务调用。.NET web服务可以接受表单数据并保存它。
发布于 2009-02-09 18:30:51
难道你不能使用javascript计时器来“点击”提交按钮吗?听起来使用这个表单真的很烦人,如果当你试图填写它的时候,它一直在回复。
https://stackoverflow.com/questions/529238
复制相似问题