2012-02-15 157 views
3

在我的ascx控件我有一个按钮,其中我打电话事件处理程序,并从该事件处理程序我打电话这是一个主持人如何停止自动按钮点击F5和页面刷新?

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在点击项目页面时会再次回发。

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

请别人帮我..

+0

我认为在插入记录后最好重定向到同一页面并避免所有这些。 – Aristos 2012-02-15 13:12:44

回答

1

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

希望这会有所帮助。

+0

谢谢你的好例子.. – Rocky 2012-02-16 04:43:53

+0

但没有完全解决我的问题,我在datalist中添加项目,当我点击datalist项目时,回传呼叫问题即将到来.. – Rocky 2012-02-16 05:29:45

0

有时一个简单的Response.Redirect是好的。它基本上将初始POST变成另一个GET请求。只要你坚持所有张贴的信息,这就行得通了。否则,他们将不再可用,显然。

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

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

+0

任何人都可以halp我... – Rocky 2012-02-17 05:45:44

相关问题