如何停止自动按钮点击F5和页面刷新?

时间:2012-02-15 12:59:54

标签: c# asp.net mvp

在我的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();

  };

当我点击btn添加其工作正常并且记录正在添加,但是当我刷新浏览器页面时,通过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将再次回发。

如何停止自动按钮点击F5或页面刷新而不点击btnAdd。

请有人帮帮我..

2 个答案:

答案 0 :(得分:1)

检查此链接检测浏览器刷新避免在ASP.NET中触发事件。 see here

希望这有帮助。

答案 1 :(得分:0)

有时简单Response.Redirect就好了。它基本上将初始POST转换为不同的GET请求。只要您保留所有POSTed信息,这就可以工作。否则他们将不再可用。

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

这并不总是有效,确实有缺点。而且,这种方式并不太复杂。使用Routing Framework可能会让您获得更顺畅的URL。