【问题标题】:How to stop auto button click on F5 and page refresh?如何停止自动按钮单击 F5 和页面刷新?
【发布时间】:2013-08-22 19:05:30
【问题描述】:

在我的 ascx 控件中,我有一个按钮,我在其中调用事件处理程序,并从该事件处理程序调用演示者中的方法

在 ascx 页面上

   public event EventHandler<EventArgs> Add;

   protected void btnAdd_Click(object sender, EventArgs e)
    {
        if (Add != null)
             Add(sender, e);

    }

在演示者上

  AddListView.Add += delegate(object sender, EventArgs e)//AddListView is a Interface
  {
    Add();

  };

当我单击 btnAdd 时,它的工作正常并且正在添加记录,但是当我刷新浏览器页面时,按 F5 并再次单击鼠标 btnAdd 会触发。我尝试使用

   // Page refresh F5 btn press
    protected override void LoadViewState(object savedState)
    {
        object[] AllStates = (object[])savedState;
        base.LoadViewState(AllStates[0]);
        _refreshState = bool.Parse(AllStates[1].ToString());
        _isRefresh = _refreshState == bool.Parse(Session["__ISREFRESH"].ToString());
    }

    // Page refresh F5 btn press
    protected override object SaveViewState()
    {
        Session["__ISREFRESH"] = _refreshState;
        object[] AllStates = new object[2];
        AllStates[0] = base.SaveViewState();
        AllStates[1] = !(_refreshState);
        return AllStates;
    }

然后它工作正常,但刷新后我无法再次点击 btnAdd,点击 btnAdd,我再次刷新然后它工作正常..

我在其他一些控件上调用此控件,因为我有一个 Datalist,单击项目页面将再次回发。

如何在不点击 btnAdd 的情况下停止自动按钮点击 F5 或页面刷新。

请有人帮助我..

【问题讨论】:

  • 检查此链接检测浏览器刷新避免在 ASP.NET 中触发事件。 see here希望这会有所帮助。
  • 我认为插入记录后最好重定向到同一页面并避免所有这些。
  • 但没有完全解决我的问题,我在 datalist 中添加项目,当我点击 datalist 项目时,回发调用问题来了..

标签: c# asp.net mvp


【解决方案1】:

有时一个简单的Response.Redirect 就可以了。它基本上将初始 POST 转换为不同的 GET 请求。只要您保留所有已发布的信息,这就会起作用。否则,显然它们将不再可用。

protected void Button1_Click(object sender, EventArgs e)
{
    // we are in Default.aspx here!
    Response.Redirect("Default.aspx");
}

这并不总是有效,并且确实有缺点。而且,这种方式并不太复杂。使用路由框架可能会让您的 URL 更流畅。

【讨论】:

    猜你喜欢
    • 2016-11-07
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多