首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.NET客户端回发

ASP.NET客户端回发
EN

Stack Overflow用户
提问于 2009-02-09 18:19:35
回答 4查看 5.6K关注 0票数 0

我有你的基本asp.net网页表单,其中包含一些客户端JavaScript,强制页面超时,然后在5分钟后重定向。主要是为了保护可能的敏感信息。

在超时时,我想强制服务器回发,允许我保存表单值以供将来编辑。

我用过ClientScript.GetPostBackClientHyperlink()和ClientScript.GetPostBackEventReference()。这两个似乎都给我带来了EventValidation问题。是的,我可以关闭事件验证,但是有没有不同的或者更好的方法呢?

理想情况下,我不想调用控件(它必须显示),而只是使用某种类型的参数引发回发,我可以将服务器端识别为超时条件的结果。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-10 18:54:24

没有很好的解决方案,所以我自己建了一个。一个非常简单的自定义控件。欢迎评论。

代码语言:javascript
复制
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);
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2009-02-09 18:29:30

这可能有点夸张,但您可以设置一个javascript计时器来触发web服务调用。.NET web服务可以接受表单数据并保存它。

票数 1
EN

Stack Overflow用户

发布于 2009-02-09 18:30:51

难道你不能使用javascript计时器来“点击”提交按钮吗?听起来使用这个表单真的很烦人,如果当你试图填写它的时候,它一直在回复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/529238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档